C#の正規表現で真偽値を返すサンプルです。IsMatchメソッドを使用します。
目次
IsMatchメソッド
public static bool IsMatch (string input, string 正規表現のパターン); |
- 1つめの引数は、対象の文字列です。
- 2つめの引数は、正規表現のパターンです。
- 一致した場合はtrueを返し、一致しなかった場合falseを返します。
文字列を指定
using System;
using System.Text.RegularExpressions;
class Test1
{
static void Main()
{
string a = "BC";
Console.WriteLine(Regex.IsMatch("ABC", a)); //True
Console.WriteLine(Regex.IsMatch("ACB", a)); //False
}
}
8行目は、文字列「BC」を指定しています。
任意の1文字(.)
string a = ".BC";
Console.WriteLine(Regex.IsMatch("ABC", a)); //True
Console.WriteLine(Regex.IsMatch("AABC", a)); //True
Console.WriteLine(Regex.IsMatch("ACB", a)); //False
ピリオド(.)は、任意の1文字を表します。
任意の文字が0回以上(.*)
string a = "A.*D";
Console.WriteLine(Regex.IsMatch("ABCD", a)); //True
Console.WriteLine(Regex.IsMatch("ABD", a)); //True
Console.WriteLine(Regex.IsMatch("AD", a)); //True
ドット(.)は任意の文字でアスタリスク(*)は直前の文字が0回以上の繰り返しを表します。
任意の文字が1回以上(.+)
string a = "A.+D";
Console.WriteLine(Regex.IsMatch("ABCD", a)); //True
Console.WriteLine(Regex.IsMatch("ABD", a)); //True
Console.WriteLine(Regex.IsMatch("AD", a)); //False
ドット(.)は任意の文字でプラス(+)は直前の文字が1回以上の繰り返しを表します。
orを指定([])
string a = "[AB]";
Console.WriteLine(Regex.IsMatch("ABC", a)); //True
Console.WriteLine(Regex.IsMatch("ZZB", a)); //True
Console.WriteLine(Regex.IsMatch("ZZZ", a)); //False
「A」または「B」を指定しています。
否定(^)
string a = "[^A]";
Console.WriteLine(Regex.IsMatch("ZZZ", a)); //True
Console.WriteLine(Regex.IsMatch("ZAA", a)); //True
Console.WriteLine(Regex.IsMatch("AAA", a)); //False
「A」以外の文字を指定しています。
先頭の文字列で検索する正規表現と似ていますが、こちらは角かっこ([])があります。
文字の範囲(-)
string a = "[A-C]";
Console.WriteLine(Regex.IsMatch("ABC", a)); //True
Console.WriteLine(Regex.IsMatch("ZZC", a)); //True
Console.WriteLine(Regex.IsMatch("ZZZ", a)); //False
「A」または「B」または「C」の文字があるか指定しています。
先頭の文字列(^)
string a = "^AB";
Console.WriteLine(Regex.IsMatch("ABC", a)); //True
Console.WriteLine(Regex.IsMatch("ACB", a)); //False
先頭が「AB」の文字を指定しています。
文字を否定で検索する正規表現と似ていますが、こちらは角かっこ([])がありません。
末尾の文字列($)
string a = "BC$";
Console.WriteLine(Regex.IsMatch("ABC", a)); //True
Console.WriteLine(Regex.IsMatch("ACB", a)); //False
末尾が「BC」の文字を指定しています。
連続する文字{数値}
string a = "c{2}";
Console.WriteLine(Regex.IsMatch("acccb", a)); //True
Console.WriteLine(Regex.IsMatch("accb", a)); //True
Console.WriteLine(Regex.IsMatch("acbc", a)); //False
「c」が2回連続する文字を指定しています。
1桁以上{1,}
string a = "[0-9]{1,}-";
Console.WriteLine(Regex.IsMatch("1-", a));//True
Console.WriteLine(Regex.IsMatch("123-", a));//True
Console.WriteLine(Regex.IsMatch("ab1-", a));//True
Console.WriteLine(Regex.IsMatch("a1b-", a));//False
数値1桁以上とハイフン(-)を指定しています。
数値(0-9)の5桁+先頭と末尾も(0-9)
string a = "^[0-9]{5}$";
Console.WriteLine(Regex.IsMatch("12345", a));//True
Console.WriteLine(Regex.IsMatch("123", a));//False 桁数不足
Console.WriteLine(Regex.IsMatch("a2345", a));//False 文字あり
数値(0-9)と英字(a-f)の5桁+先頭と末尾も(0-9 or a-f)
string a = "^[0-9a-f]{5}$";
Console.WriteLine(Regex.IsMatch("1a23b", a));//True
Console.WriteLine(Regex.IsMatch("a1bc", a));//False 桁数不足
Console.WriteLine(Regex.IsMatch("12345", a));//True 数値のみ
Console.WriteLine(Regex.IsMatch("abcde", a));//True 英字のみ
郵便番号(数値3桁とハイフンと数値4桁)+先頭と末尾も(0-9)
string a = "^[0-9]{3}-[0-9]{4}$";
Console.WriteLine(Regex.IsMatch("123-4567", a));//True
Console.WriteLine(Regex.IsMatch("1234567", a));//False
Console.WriteLine(Regex.IsMatch("1234-567", a));//False
郵便番号(数値3桁とハイフンと数値4桁)を指定しています。
ドット(.)を文字として指定(エスケープ)
string ptr = Regex.Escape("a.");
Console.WriteLine(Regex.IsMatch("a.", ptr));//True
Console.WriteLine(Regex.IsMatch("aa", ptr));//False
Escapeメソッドで、ドット(.)を文字として扱います。「a.」を指定しています。
ドット(.)にエスケープをつけない場合は任意の一文字という意味になります。
Escapeメソッドは、文字 (\、*、+、?、|、{、[、(、)、^、$、.、#、空白) をエスケープします。
大文字小文字を無視する(RegexOptions.IgnoreCase)
string ptr = "c";
bool b = Regex.IsMatch("ABC", ptr, RegexOptions.IgnoreCase);
Console.WriteLine(b); //True
3行目は、IsMatchメソッドの3つめの引数にRegexOptions.IgnoreCaseを指定しています。大文字小文字を無視します。
以下はMicrosoftのIsMatch(String, String)のリンクです。
https://docs.microsoft.com/ja-jp/dotnet/api/system.text.regularexpressions.regex.ismatch?view=netframework-4.8#System_Text_RegularExpressions_Regex_IsMatch_System_String_System_String_
RegularExpressionsが存在しないというエラーが出る場合
「型または名前空間の名前'RegularExpressions'が名前空間'System.Text'に存在しません。」を解消する手順です。
1.ソリューションエクスプローラーの「参照」→「参照の追加」をクリックします。
2.「System」にチェックを入れてOKを押すとエラーが消えます。
関連の記事