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 pattern
elemecie , result
to True
. Jeśli ciąg nie spełnia wzorca, result
to .False
Jeśli ciągi i string
pattern
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 charlist
string
. 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 A
—Z
i [!H–L]
powoduje dopasowanie, jeśli odpowiednia pozycja znaku zawiera dowolny znak poza zakresem H
–L
.
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 A
—C
lub zakres X
—Z
.
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
, , B
C
, D
i E
.A
[A–E]
Z Option Compare Text
, [A–E]
pasuje A
do , À
à
b
C
B
a
D
d
c
E
i .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*"