Like – operátor (Visual Basic)
Porovná řetězec se vzorem.
Důležité
Operátor Like
se v současné době nepodporuje v projektech .NET Core a .NET Standard.
Syntaxe
result = string Like pattern
Součástky
result
Povinný: Libovolná Boolean
proměnná. Výsledkem je Boolean
hodnota označující, zda string
splňuje pattern
podmínky .
string
Povinný: Libovolný String
výraz.
pattern
Povinný: Libovolný String
výraz, který odpovídá konvencím porovnávání vzorů popsaným v části Poznámky.
Poznámky
Pokud hodnota v string
splňuje vzor obsažený , pattern
result
je True
. Pokud řetězec nevyhovuje vzoru, result
je False
. Pokud jsou oba string
a pattern
jsou prázdné řetězce, výsledek je True
.
Metoda porovnání
Chování operátoru Like
závisí na příkazu Option Compare. Výchozí metoda porovnání řetězců pro každý zdrojový soubor je Option Compare Binary
.
Možnosti vzorku
Integrované porovnávání vzorů poskytuje univerzální nástroj pro porovnání řetězců. Funkce porovnávání vzorů umožňují spárovat jednotlivé znaky string
s určitým znakem, zástupným znakem, seznamem znaků nebo rozsahem znaků. V následující tabulce jsou uvedeny povolené pattern
znaky a jejich shoda.
Znaky v pattern |
Shody v string |
---|---|
? |
Libovolný jeden znak |
* |
Nula nebo více znaků |
# |
Libovolná jednoduchá číslice (0–9) |
[charlist] |
Libovolný jeden znak v charlist |
[!charlist] |
Libovolný jeden znak, který není v charlist |
Seznamy znaků
Skupinu jednoho nebo více znaků (charlist
) uzavřených v hranatých závorkách ([ ]
) lze použít ke shodě libovolného jednoho znaku string
a může obsahovat téměř jakýkoli kód znaku včetně číslic.
Vykřičník (!
) na začátku charlist
znamená, že shoda se provede v případě, že je nalezen string
libovolný znak s výjimkou znaků v charlist
. Při použití vnějších závorek se vykřičník shoduje se samotným.
Speciální znaky
Chcete-li se shodovat se speciálními znaky v levé závorce ([
), otazníkem (?
), znaménkem čísla (#
) a hvězdičkou (*
), uzavřete je do závorek. Pravá hranatá závorka (]
) se nedá použít v rámci skupiny, aby se shodovala sama se sebou, ale dá se použít mimo skupinu jako jednotlivý znak.
Sekvence []
znaků se považuje za řetězec nulové délky (""
). Nemůže však být součástí seznamu znaků uzavřených v hranatých závorkách. Pokud chcete zkontrolovat, jestli pozice v string
jednom ze skupin znaků nebo vůbec žádný znak obsahuje, můžete použít Like
dvakrát. Příklad najdete v tématu Postupy: Porovnávání řetězce se vzorem.
Rozsahy znaků
Pomocí spojovníku (–
) k oddělení dolní a horní hranice rozsahu charlist
lze určit rozsah znaků. Výsledkem je například shoda, [A–Z]
pokud odpovídající pozice znaku obsahuje string
libovolný znak v rozsahu A
–Z
a [!H–L]
výsledkem je shoda, pokud odpovídající pozice znaku obsahuje libovolný znak mimo oblast H
–L
.
Když zadáte rozsah znaků, musí se zobrazit ve vzestupném pořadí řazení, tj. od nejnižšího po nejvyšší. [A–Z]
Je tedy platným vzorem, ale [Z–A]
není.
Více oblastí znaků
Pokud chcete zadat více oblastí pro stejnou pozici znaku, umístěte je do stejných závorek bez oddělovačů. Výsledkem je například shoda, [A–CX–Z]
pokud odpovídající pozice znaku obsahuje string
libovolný znak v oblasti A
neboC
oblastiX
Z
.
Použití spojovníku
Pomlčka (–
) se může objevit buď na začátku (po vykřičníku, pokud existuje) nebo na konci samotné shody charlist
. V jakémkoli jiném umístění označuje spojovník rozsah znaků oddělených znaky na obou stranách pomlčky.
Pořadí kolace
Význam zadaného rozsahu závisí na pořadí znaků v době běhu podle nastavení Option Compare
národního prostředí systému, na kterém kód běží. S Option Compare Binary
, rozsah [A–E]
odpovídá A
, B
, C
D
a E
. S Option Compare Text
, [A–E]
shodami A
, a
, , , À
, C
c
B
à
D
d
b
, E
, a .e
Oblast se neshoduje Ê
nebo ê
protože se zvýrazňované znaky kompletují po neaktucentovaných znachů v pořadí řazení.
Znaky digrafu
V některých jazycích existují abecední znaky, které představují dva samostatné znaky. Například několik jazyků používá znak æ
k reprezentaci znaků a
a e
jejich společné zobrazení. Operátor Like
rozpozná, že jeden znak digrafu a dva jednotlivé znaky jsou ekvivalentní.
Pokud je jazyk, který používá znak digrafu, zadán v nastavení národního prostředí systému, výskyt jednoho znaku digrafu v obou pattern
nebo string
odpovídá ekvivalentní dvouznakové sekvenci v druhém řetězci. Podobně znak digrafu v pattern
uzavřených závorkách (sám o sobě, v seznamu nebo v oblasti) odpovídá ekvivalentní dvouznakové sekvenci v string
.
Přetížení
Operátor Like
může být přetížen, což znamená, že třída nebo struktura mohou předefinovat jeho chování, pokud operand má typ této třídy nebo struktury. Pokud váš kód používá tento operátor pro takovou třídu nebo strukturu, ujistěte se, že rozumíte jeho předdefinované chování. Další informace naleznete v tématu Procedury operátoru.
Příklad
Tento příklad používá Like
operátor k porovnání řetězců s různými vzory. Výsledky se převedou do Boolean
proměnné označující, jestli každý řetězec splňuje tento vzor.
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*"