Like — Operator (Visual Basic)

Porównuje ciąg ze wzorcem.

Ważne

Operator Like nie jest obecnie obsługiwany w projektach .NET Core i .NET Standard.

Składnia

result = string Like pattern  

generatora

result
Wymagany. Dowolna Boolean zmienna. Wynik jest wartością wskazującą Boolean , czy string element spełnia wartość pattern.

string
Wymagany. Dowolne String wyrażenie.

pattern
Wymagany. Dowolne String wyrażenie zgodne z konwencjami dopasowywania wzorców opisanymi w sekcji "Uwagi".

Uwagi

Jeśli wartość w string elemecie spełnia wzorzec zawarty w patternelemecie , result to True. Jeśli ciąg nie spełnia wzorca, result to .False Jeśli ciągi i stringpattern są puste, wynikiem jest True.

Metoda porównania

Zachowanie Like operatora zależy od instrukcji Porównanie opcji. Domyślną metodą porównania ciągów dla każdego pliku źródłowego jest Option Compare Binary.

Opcje wzorca

Dopasowanie wbudowanego wzorca zapewnia uniwersalne narzędzie do porównywania ciągów. Funkcje dopasowywania wzorca umożliwiają dopasowanie każdego znaku do string określonego znaku, symbolu wieloznakowego, listy znaków lub zakresu znaków. W poniższej tabeli przedstawiono dozwolone pattern znaki i ich dopasowanie.

Znaki w pattern Dopasowania w string
? Dowolny pojedynczy znak
* Zero lub więcej znaków
# Dowolna pojedyncza cyfra (0–9)
[charlist] Dowolny pojedynczy znak w charlist
[!charlist] Dowolny pojedynczy znak nie jest w charlist

Listy znaków

Grupę co najmniej jednego znaku () ujętego w nawiasy kwadratowe (charlist[ ]) można użyć do dopasowania dowolnego pojedynczego znaku i może zawierać niemal dowolny kod znaku, w string tym cyfry.

Wykrzyknik (!) na początku charlist oznacza, że dopasowanie jest wykonywane, jeśli w obiekcie znajduje się dowolny znak z wyjątkiem znaków w charliststring. W przypadku użycia nawiasów zewnętrznych wykrzyknik pasuje do samego siebie.

Znaki specjalne

Aby dopasować znaki specjalne w lewym nawiasie kwadratowym (), znak zapytania ([?), znak numeru (#) i gwiazdkę (*), należy je ująć w nawiasy kwadratowe. Prawy nawias kwadratowy (]) nie może być używany w grupie, aby dopasować się do siebie, ale może być używany poza grupą jako pojedynczy znak.

Sekwencja [] znaków jest traktowana jako ciąg o zerowej długości (""). Nie może być jednak częścią listy znaków ujętej w nawiasy. Jeśli chcesz sprawdzić, czy pozycja w string obiekcie zawiera jedną z grup znaków, czy w ogóle nie ma znaku, możesz użyć Like dwukrotnie. Aby zapoznać się z przykładem, zobacz How to: Match a String against a Pattern (Jak dopasować ciąg do wzorca).

Zakresy znaków

Używając łącznika (), aby oddzielić dolne i górne granice zakresu, charlist można określić zakres znaków. Na przykład powoduje dopasowanie, [A–Z] jeśli odpowiednia pozycja znaku w string obiekcie zawiera dowolny znak w zakresie AZ i [!H–L] powoduje dopasowanie, jeśli odpowiednia pozycja znaku zawiera dowolny znak poza zakresem HL.

Po określeniu zakresu znaków muszą one być wyświetlane w kolejności rosnącej sortowania, czyli od najniższej do najwyższej. [A–Z] W związku z tym jest prawidłowym wzorcem, ale [Z–A] nie jest.

Wiele zakresów znaków

Aby określić wiele zakresów dla tej samej pozycji znaku, umieść je w tych samych nawiasach bez ograniczników. Na przykład powoduje dopasowanie, [A–CX–Z] jeśli odpowiednia pozycja znaku w string obiekcie zawiera dowolny znak w zakresie AC lub zakres XZ .

Użycie łącznika

Łącznik () może pojawić się na początku (po wykrzykniku, jeśli istnieje) lub na końcu charlist dopasowania. W dowolnej innej lokalizacji łącznik identyfikuje zakres znaków rozdzielonych znakami po obu stronach łącznika.

Sekwencja sortowania

Znaczenie określonego zakresu zależy od kolejności znaków w czasie wykonywania, zgodnie z ustawieniem Option Compare ustawień regionalnych systemu, na którym działa kod. Za pomocą parametru zakres jest zgodny z elementami Option Compare Binary, , BC, Di E.A[A–E] Z Option Compare Text, [A–E] pasuje Ado , ÀàbCBaDdcEi .e Zakres nie jest zgodny Ê lub ê ponieważ znaki wyróżniające są sortowane po nieoznakowanych znakach w kolejności sortowania.

Znaki digrafu

W niektórych językach istnieją znaki alfabetyczne, które reprezentują dwa oddzielne znaki. Na przykład kilka języków używa znaku æ do reprezentowania znaków a i e ich wyświetlania razem. Operator Like rozpoznaje, że pojedynczy znak digrafu i dwa pojedyncze znaki są równoważne.

Gdy język używający znaku digrafu jest określony w ustawieniach regionalnych systemu, wystąpienie pojedynczego znaku digrafu w elemencie pattern lub string pasuje do równoważnej sekwencji dwóch znaków w drugim ciągu. Podobnie znak digrafu w pattern nawiasach kwadratowych (samodzielnie, na liście lub w zakresie) pasuje do równoważnej sekwencji dwuznakowej w elemencie string.

Przeciążenie

Operator Like może być przeciążony, co oznacza, że klasa lub struktura może ponownie zdefiniować jego zachowanie, gdy operand ma typ tej klasy lub struktury. Jeśli kod używa tego operatora w takiej klasie lub strukturze, upewnij się, że rozumiesz jego ponownie zdefiniowane zachowanie. Aby uzyskać więcej informacji, zobacz Procedury operatorów.

Przykład

W tym przykładzie użyto Like operatora do porównywania ciągów z różnymi wzorcami. Wyniki przechodzą do zmiennej wskazującej Boolean , czy każdy ciąg spełnia wzorzec.

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*"

Zobacz też