VB.NETの正規表現で真偽値を返すサンプルです。IsMatchメソッドを使用します。
目次
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_
関連の記事