初心者歓迎!手と目で覚える正規表現入門
マッチ 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);
}
}
}
}
置換
コメント