C# 正規表現で真偽値を返す(IsMatchメソッド)

C#の正規表現で真偽値を返すサンプルです。IsMatchメソッドを使用します。

目次

サンプル IsMatchメソッド / 文字列を指定
任意の1文字(.) / 任意の文字が0回以上(.*) / 任意の文字が1回以上(.+)
orを指定([]) / 否定(^) / 文字の範囲(-)
先頭の文字列(^) / 末尾の文字列($)
連続する文字{数値} / 1桁以上{1,}
数値(0-9)の5桁+先頭と末尾も(0-9)
数値(0-9)と英字(a-f)の5桁+先頭と末尾も(0-9 or a-f)
郵便番号(数値3桁とハイフンと数値4桁)+先頭と末尾も(0-9)
ドット(.)を文字として指定(エスケープ)
  大文字小文字を無視する(RegexOptions.IgnoreCase)
RegularExpressionsが存在しないというエラーが出る場合

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メソッドは、文字 (\、*、+、?、|、{、[、(、)、^、$、.、#、空白) をエスケープします。

https://docs.microsoft.com/ja-jp/dotnet/api/system.text.regularexpressions.regex.escape?view=netcore-3.1

大文字小文字を無視する(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を押すとエラーが消えます。

関連の記事

C# 正規表現で複数の値を返す(Matchesメソッド)
C# 正規表現で最初の文字列を返す(Matchメソッド)

△上に戻る