C#で正規表現を使ってみる

只今、『独習C#』(新版)でC#を勉強中。

C#正規表現を使ったコードを書いてみたが、C#正規表現を扱うことよりも、どうも正規表現そのものの難しさの方が躓きになっているような気がする。

サンプルそのままではなく、よくあるHTMLからURLを抽出するようにしてみた。

ファイル"search2.htm"からHTMLを読み込みURLのテキスト部分を抽出する。

第1のグループがURLで、第2のグループがテキスト部分になり、Groups[2].Valueを出力している。

Webで検索してみると、グループに対して「?<url>」「?<text>」などと「url」と「text」というグループ名を付けることもできるようだ。(初めて知りました、ありがとう。)

ここでは、素直に順番で。

 

using System;
using System.IO;
using System.Text.RegularExpressions;

namespace SelfCSharp.Chap05
{
    class RegMatches
    {
        static void Main(string[] args)
        {
            var rgx = new Regex("<a href=\"(.*)\".*>(.*)</a>", RegexOptions.IgnoreCase | RegexOptions.Singleline);
            //var rgx = new Regex("<a href=\"(?<url>.*?)\".*?>(?<text>.*?)</a>", RegexOptions.IgnoreCase | RegexOptions.Singleline);


            string filename = @"C:\Users\user1\Documents\C#\RegEx\search2.htm";
            using ( var reader = new StreamReader(filename,System.Text.Encoding.GetEncoding("Shift_JIS")) )
            {
                while (!reader.EndOfStream)
                {
                    var line = reader.ReadLine();
                    var result = rgx.Matches(line);
                    //Console.WriteLine(result.Count);

                    foreach (Match m in result)
                    {
                        //Console.WriteLine(m.Groups["text"].Value);
                        Console.WriteLine(m.Groups[2].Value);
                    }

                    //Console.WriteLine(line);
                }
            }
        }
    }
}