Like 演算子 (Visual Basic)

パターンと文字列を比較します。

Von Bedeutung

Like演算子は現在、.NET Core および .NET Standard プロジェクトではサポートされていません。

構文

result = string Like pattern

部品

result 必須。 任意の Boolean 変数。 結果は、Booleanがstringを満たすかどうかを示すpattern値です。

string 必須。 任意の String 式。

pattern 必須。 「解説」で説明されているパターン マッチング規則に準拠する String 式。

注釈

stringの値がpatternに含まれるパターンを満たす場合、resultはTrue。 文字列がパターンを満たさない場合、 result は False。 stringとpatternの両方が空の文字列の場合、結果はTrue。

比較方法

Like演算子の動作は、Option Compare ステートメントによって異なります。 各ソース ファイルの既定の文字列比較方法は Option Compare Binary。

パターンのオプション

組み込みのパターン マッチングでは、文字列比較に使用できるさまざまなツールが用意されています。 パターン マッチング機能を使用すると、string 内の各文字を、特定の文字、ワイルドカード文字、文字リスト、または文字範囲と一致させることができます。 次の表に、pattern で使用できる文字と、それらが何に一致するかを示します。

pattern 内の文字 string 内の以下に一致
? 任意の 1 文字
* 0 個以上の文字
# 任意の 1 つの数字 (0 ~ 9)
[charlist] charlist 内の任意の 1 文字
[!charlist] charlist 内にない任意の 1 文字

文字リスト

角かっこ (charlist) で囲まれた 1 つ以上の文字 ([ ]) のグループを使用して、string内の任意の 1 文字と一致させることができます。また、数字を含むほぼすべての文字コードを含めることができます。

!の先頭にある感嘆符 (charlist) は、charlist内の文字以外の文字がstringで見つかった場合に一致が行われることを意味します。 角かっこの外側で使用すると、感嘆符はそれ自体と一致します。

特殊文字

特殊文字の左角かっこ ([)、疑問符 (?)、番号記号 (#)、アスタリスク (*) と一致させるには、角かっこで囲みます。 右角かっこ (]) は、グループ内で使用してそれ自体に一致させることはできませんが、グループの外部で個々の文字として使用できます。

[]文字シーケンスは、長さ 0 の文字列 ("") と見なされます。 ただし、角かっこで囲まれた文字リストの一部にすることはできません。 string内の位置に 1 つの文字グループが含まれているか、まったく文字が含まれているのかを確認する場合は、Likeを 2 回使用できます。 例については、「 方法: パターンに対して文字列を照合する」を参照してください。

文字範囲

ハイフン (–) を使用して範囲の下限と上限を区切ることで、 charlist は文字の範囲を指定できます。 たとえば、[A–Z]stringの対応する文字位置にAZ範囲内の任意の文字が含まれている場合は一致し、対応する文字位置に[!H–L]Hの範囲外の文字が含まれている場合、L一致が発生します。

文字の範囲を指定する場合は、昇順の並べ替え順序で表示する必要があります。つまり、最下位から最高の順に表示されます。 したがって、 [A–Z] は有効なパターンですが、 [Z–A] は有効ではありません。

複数の文字範囲

同じ文字位置に複数の範囲を指定するには、区切り記号を使用せずに同じ角かっこ内に配置します。 たとえば、[A–CX–Z]stringの対応する文字位置に、A ~C または範囲 X– Z内の任意の文字が含まれている場合、一致が発生します。

ハイフンの使用法

ハイフン (–) は、先頭 (感嘆符がある場合は感嘆符の後) または charlist の末尾に表示して、それ自体に一致させることができます。 その他の場所では、ハイフンは、ハイフンの両側の文字で区切られた文字の範囲を識別します。

照合順序

指定した範囲の意味は、実行時の文字の順序によって異なります。 Option Compare と、コードが実行されているシステムのロケール設定によって決まります。 Option Compare Binaryでは、範囲[A–E]A、B、C、D、およびEと一致します。 Option Compare Textでは、[A–E]は、A、a、À、à、B、b、C、c、D、d、E、およびeに一致します。 範囲が Ê または ê と一致しません。アクセント記号付き文字は、並べ替え順序で非上昇文字の後に照合されるためです。

ディグラフ文字

一部の言語では、2 つの個別の文字を表す英字があります。 たとえば、複数の言語で文字 æ を使用して、文字が一緒に表示されるときに a および e を表します。 Like演算子は、単一のディグラフ文字と 2 つの個々の文字が等価であることを認識します。

ディグラフ文字を使用する言語がシステム ロケール設定で指定されている場合、 pattern または string の 1 つのディグラフ文字が、もう一方の文字列の等価の 2 文字シーケンスと一致します。 同様に、角かっこで囲まれた pattern 内のディグラフ文字 (それ自体、リスト内、または範囲内) は、 string内の同等の 2 文字シーケンスと一致します。

オーバーロード

Like演算子はオーバーロードできます。つまり、オペランドがそのクラスまたは構造体の型を持つ場合、クラスまたは構造体はその動作を再定義できます。 コードでこのようなクラスまたは構造体でこの演算子を使用する場合は、再定義された動作を理解していることを確認してください。 詳細については、「 演算子プロシージャ」を参照してください。

例

この例では、 Like 演算子を使用して、文字列をさまざまなパターンと比較します。 結果は、各文字列がパターンを満たすかどうかを示す Boolean 変数に入ります。

Dim testCheck As Boolean
' The following statement returns True (does "F" satisfy "F"?)
testCheck = "F" Like "F"
' The following statement returns False for Option Compare Binary
'    and True for Option Compare Text (does "F" satisfy "f"?)
testCheck = "F" Like "f"
' The following statement returns False (does "F" satisfy "FFF"?)
testCheck = "F" Like "FFF"
' The following statement returns True (does "aBBBa" have an "a" at the
'    beginning, an "a" at the end, and any number of characters in 
'    between?)
testCheck = "aBBBa" Like "a*a"
' The following statement returns True (does "F" occur in the set of
'    characters from "A" through "Z"?)
testCheck = "F" Like "[A-Z]"
' The following statement returns False (does "F" NOT occur in the 
'    set of characters from "A" through "Z"?)
testCheck = "F" Like "[!A-Z]"
' The following statement returns True (does "a2a" begin and end with
'    an "a" and have any single-digit number in between?)
testCheck = "a2a" Like "a#a"
' The following statement returns True (does "aM5b" begin with an "a",
'    followed by any character from the set "L" through "P", followed
'    by any single-digit number, and end with any character NOT in
'    the character set "c" through "e"?)
testCheck = "aM5b" Like "a[L-P]#[!c-e]"
' The following statement returns True (does "BAT123khg" begin with a
'    "B", followed by any single character, followed by a "T", and end
'    with zero or more characters of any type?)
testCheck = "BAT123khg" Like "B?T*"
' The following statement returns False (does "CAT123khg"?) begin with
'    a "B", followed by any single character, followed by a "T", and
'    end with zero or more characters of any type?)
testCheck = "CAT123khg" Like "B?T*"

こちらも参照ください