VB.NET 正規表現で真偽値を返す(IsMatchメソッド)

VB.NETの正規表現で真偽値を返すサンプルです。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)

IsMatchメソッド

public static bool IsMatch (string 文字列, string 正規表現のパターン);
  • 1つめの引数は、対象の文字列を指定します。
  • 2つめの引数は、正規表現のパターンを指定します。
  • 一致した場合はtrueを返し、一致しなかった場合falseを返します。
  • Regexクラスのメソッドです。

文字列を指定

Imports System.Text.RegularExpressions

Module Module1
    Sub Main()
        Dim a As String = "BC"

        Console.WriteLine(Regex.IsMatch("ABC", a)) 'True
        Console.WriteLine(Regex.IsMatch("ACB", a)) 'False
    End Sub
End Module

5行目は、文字列「BC」を指定しています。

任意の1文字(.)

Dim a As String = ".BC"

Console.WriteLine(Regex.IsMatch("ABC", a)) 'True
Console.WriteLine(Regex.IsMatch("AABC", a)) 'True
Console.WriteLine(Regex.IsMatch("ACB", a)) 'False

ピリオド(.)は、任意の1文字を表します。

任意の文字が0回以上(.*)

Dim a As String = "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回以上(.+)

Dim a As String = "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を指定([])

Dim a As String = "[AB]"

Console.WriteLine(Regex.IsMatch("ABC", a)) 'True
Console.WriteLine(Regex.IsMatch("ZZB", a)) 'True
Console.WriteLine(Regex.IsMatch("ZZZ", a)) 'False

「A」または「B」を指定しています。

否定(^)

Dim a As String = "[^A]"

Console.WriteLine(Regex.IsMatch("ZZZ", a)) 'True
Console.WriteLine(Regex.IsMatch("ZAA", a)) 'True
Console.WriteLine(Regex.IsMatch("AAA", a)) 'False

「A」以外の文字を指定しています。
先頭の文字列で検索する正規表現と似ていますが、こちらは角かっこ([])があります。

文字の範囲(-)

Dim a As String = "[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」の文字を指定しています。

先頭の文字列(^)

Dim a As String = "^AB"

Console.WriteLine(Regex.IsMatch("ABC", a)) 'True
Console.WriteLine(Regex.IsMatch("ACB", a)) 'False

5行目は、先頭が「AB」の文字を指定しています。
文字を否定で検索する正規表現と似ていますが、こちらは角かっこ([])がありません。

末尾の文字列($)

Dim a As String = "BC$"

Console.WriteLine(Regex.IsMatch("ABC", a)) 'True
Console.WriteLine(Regex.IsMatch("ACB", a)) 'False

末尾が「BC」の文字を指定しています。

連続する文字{数値}

Dim a As String = "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,}

Dim ptr As String = "[0-9]{1,}-"
'Dim ptr As String = "\d{1,}-"

Console.WriteLine(Regex.IsMatch("1-", ptr)) 'True
Console.WriteLine(Regex.IsMatch("123-", ptr)) 'True
Console.WriteLine(Regex.IsMatch("ab1-", ptr)) 'True
Console.WriteLine(Regex.IsMatch("a1b-", ptr)) 'False

1行目は、数値1桁以上とハイフン(-)を指定しています。
2行目は、1行目と同じ意味です。\dは、数値を意味します。

数値(0-9)の5桁+先頭と末尾も(0-9)

Dim a As String = "^[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)

Dim a As String = "^[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)

Dim a As String = "^[0-9]{3}-[0-9]{4}$"
'Dim a As String = "^\d{3}-\d{4}$"

Console.WriteLine(Regex.IsMatch("123-4567", a)) 'True
Console.WriteLine(Regex.IsMatch("1234567", a)) 'False
Console.WriteLine(Regex.IsMatch("1234-567", a)) 'False

1行目と2行目は同じ意味です。\dは、数値を意味します。

ドット(.)を文字として指定(エスケープ)

Dim ptr As String = "a\."

Console.WriteLine(Regex.IsMatch("a.", ptr)) 'True
Console.WriteLine(Regex.IsMatch("aa", ptr)) 'False

5行目は、ドット(.)を文字として扱います。「a.」を指定しています。
エスケープとしてバックスラッシュ(ユニコードのU+005C)を前につけます。環境によっては円マークで表示されます。
ドット(.)にエスケープをつけない場合は任意の一文字という意味になります。

大文字小文字を無視する(RegexOptions.IgnoreCase)

Dim a As String = "c"

Dim b As Boolean = Regex.IsMatch("ABC", a, RegexOptions.IgnoreCase)

Console.WriteLine(b) 'True

7行目は、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_

関連の記事

VB.NET 文字列を操作するサンプル

△上に戻る