初心者歓迎!手と目で覚える正規表現入門

マッチ or アンマッチ

using System;
using System.Text.RegularExpressions;

namespace RegExp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("****文字列を含むかの検索****(44-56)");
            var data = new[] { "確か44-58ですた。", "たぶん44-56", "43-56かな" };
            //探しているナンバーは44-56
            var reg = new Regex(@"44-56");
            foreach (var str in data)
            {
                Console.WriteLine(str + "は" + (reg.IsMatch(str) ? "マッチ" : "アンマッチ"));
            }
            Console.WriteLine("****文字列を含むかの検索****(4X-56)");
            //探しているナンバーは4X-56(Xは任意の数字)
            reg = new Regex(@"4[0-9]-56");
            foreach (var str in data)
            {
                Console.WriteLine(str + "は" + (reg.IsMatch(str) ? "マッチ" : "アンマッチ"));
            }
            Console.WriteLine("****文字列を含むかの検索****(赤の玉、青の玉)");
            data = new[] { "赤の玉でした", "青の玉でした", "黄の玉でした" };
            reg = new Regex(@"[赤青]の玉");
            foreach (var str in data)
            {
                Console.WriteLine(str + "は" + (reg.IsMatch(str) ? "マッチ" : "アンマッチ"));
            }
            Console.WriteLine("****特定の文字を含まないかの検索****(Xの玉、Xの玉(赤、青以外)");
            data = new[] { "赤の玉でした", "青の玉でした", "黄の玉でした" };
            reg = new Regex(@"[^赤青]の玉");
            foreach (var str in data)
            {
                Console.WriteLine(str + "は" + (reg.IsMatch(str) ? "マッチ" : "アンマッチ"));
            }
            Console.WriteLine("****特定の範囲の文字を含むかの検索****(g9,e6)");
            data = new[] { "a8", "g9", "e6" };
            reg = new Regex(@"[e-g][5-9]");
            foreach (var str in data)
            {
                Console.WriteLine(str + "は" + (reg.IsMatch(str) ? "マッチ" : "アンマッチ"));
            }
            Console.WriteLine("****特定の範囲の文字を含むかの検索****(s-5-Z,a-4-B)");
            data = new[] { "a-4-B", "s-5-Z", "a-17-C" };
            reg = new Regex(@"[a-z]-[0-9]-[A-Z]");
            foreach (var str in data)
            {
                Console.WriteLine(str + "は" + (reg.IsMatch(str) ? "マッチ" : "アンマッチ"));
            }
            Console.WriteLine("****特定の範囲の文字を含むかの検索****(s-5-Z,a-4-B)");
            data= new[] { "a-4-B", "s-5-Z", "a-17-C" };
            reg = new Regex(@"[a-z]-[0-9]-[A-Z]");
            foreach (var str in data)
            {
                Console.WriteLine(str + "は" + (reg.IsMatch(str) ? "マッチ" : "アンマッチ"));
            }
            Console.WriteLine("****定義済み文字クラスを使った検索****(a 7)");
            data = new[] { "a 7", "ab7", "a 74", "7 7" };
            reg = new Regex(@"\w\s\w");
            foreach (var str in data)
            {
                Console.WriteLine(str + "は" + (reg.IsMatch(str) ? "マッチ" : "アンマッチ"));
            }
            Console.WriteLine("****定義済み文字クラスを使った検索****(a 7)");
            data = new[] { "a 7", "ab7", "a 74", "7 7" };
            reg = new Regex(@"\w\s\w");
            foreach (var str in data)
            {
                Console.WriteLine(str + "は" + (reg.IsMatch(str) ? "マッチ" : "アンマッチ"));
            }
            Console.WriteLine("****メタ文字を使った検索****(山田花子)");
            data = new[] { "山田花子", "山下久美子", "山 久子" };
            reg = new Regex(@"山..子");
            foreach (var str in data)
            {
                Console.WriteLine(str + "は" + (reg.IsMatch(str) ? "マッチ" : "アンマッチ"));
            }
            Console.WriteLine("****前方一致検索****(山田花子)");
            data = new[] { "山田花子", "私は山田です。", " 山 久子" };
            reg = new Regex(@"^山");
            foreach (var str in data)
            {
                Console.WriteLine(str + "は" + (reg.IsMatch(str) ? "マッチ" : "アンマッチ"));
            }
            Console.WriteLine("****後方一致検索****(山田花子)");
            data = new[] { "山田花子", "私は山田花子です。", "山 久子。"};
            reg = new Regex(@"子$");
            foreach (var str in data)
            {
                Console.WriteLine(str + "は" + (reg.IsMatch(str) ? "マッチ" : "アンマッチ"));
            }
            Console.WriteLine("****前方後方一致検索****(山田花子)");
            data = new[] { "山田花子", "山田花子です。", "山 久子。" };
            reg = new Regex(@"^山..子$");
            foreach (var str in data)
            {
                Console.WriteLine(str + "は" + (reg.IsMatch(str) ? "マッチ" : "アンマッチ"));
            }
            Console.WriteLine("****選択肢検索****(東京または横浜)");
            data = new[] { "東京タワー", "横浜駅前", "新東京美術館" ,"東横ホテル"};
            reg = new Regex(@"東京|横浜");
            foreach (var str in data)
            {
                Console.WriteLine(str + "は" + (reg.IsMatch(str) ? "マッチ" : "アンマッチ"));
            }
            Console.WriteLine("****数字3桁-数字2桁****(312-12)");
            data = new[] { "123-45", "090-88", "11-222", "abd-de" };
            reg = new Regex(@"[0-9]{3}-[0-9]{2}");
            foreach (var str in data)
            {
                Console.WriteLine(str + "は" + (reg.IsMatch(str) ? "マッチ" : "アンマッチ"));
            }
            Console.WriteLine("****4~8文字****(June,July)");
            data = new[] { "June", "July", "August", "September" };
            reg = new Regex(@"^\w{4,8}$");
            foreach (var str in data)
            {
                Console.WriteLine(str + "は" + (reg.IsMatch(str) ? "マッチ" : "アンマッチ"));
            }
            Console.WriteLine("***サブパターンの囲み****(09012345678,090-1234-5678");
            data = new[] { "09012345678", "090-1234-5678", "050-1234-5678", "080-0000-0000" };
            //reg = new Regex(@"(070|080|090)-?[0-9]{4}-?[0-9]{4}");
            reg = new Regex(@"(070|080|090)(-?[0-9]{4}){2}");
            foreach (var str in data)
            {
                Console.WriteLine(str + "は" + (reg.IsMatch(str) ? "マッチ" : "アンマッチ"));
            }

        }
    }
}


文字列を検索

using System;
using System.Text.RegularExpressions;

namespace RegExp
{
    class Program
    {
        static void Main(string[] args)
        {
            var data = "電話番号は080-1234-5677です。";
            var reg = new Regex(@"(\d{2,4})-(\d{2,4})-(\d{4})");
            //Matchは最初の一つを検索
            var match = reg.Match(data);
            if(match.Success){
                Console.WriteLine($"位置:{match.Index} マッチ文字列:{match.Value}");
                //サブマッチ文字列を順に出力
                foreach(Group m in match.Groups){
                    Console.WriteLine($"{m.Value}");
                }
            }

            data = "自宅:03-1234-4555 携帯:090-1234-5555";
            reg=new Regex(@"(\d{2,4})-(\d{2,4})-(\d{4})");
            var result = reg.Matches(data);
            Console.WriteLine(result.Count);
            Console.WriteLine(result[0]);
            foreach(Match m in result){
                Console.WriteLine($"位置:{m.Index} 長さ:{m.Length} マッチ文字列{m.Value}");
            }


            //正規表現デフォルトは最長一致
            var tags = "<p><a href='index.html'>トップへ</a></p>";
            reg = new Regex(@"<.+>");
            result = reg.Matches(tags);
            foreach(Match m in result){
                Console.WriteLine(m.Value);
            }
            //最短マッチ?
            tags = "<p><a href='index.html'>トップへ</a></p>";
            //量指定に?をつけると最短マッチ
            reg = new Regex(@"<.+?>");
            result = reg.Matches(tags);
            foreach (Match m in result)
            {
                Console.WriteLine(m.Value);
            }

        }
    }
}


置換