Оператор Like (Visual Basic)
Сравнивает строку с шаблоном.
Внимание
Оператор в Like
настоящее время не поддерживается в проектах .NET Core и .NET Standard.
Синтаксис
result = string Like pattern
Детали
result
Обязательный. Любая Boolean
переменная. Результатом является Boolean
значение, указывающее, удовлетворяет pattern
ли string
значение .
string
Обязательный. Произвольное выражение String
.
pattern
Обязательный. Любое String
выражение, соответствующее соглашениям о сопоставлении шаблонов, описанным в разделе "Примечания".
Замечания
Если значение соответствует string
шаблону, содержаемого в pattern
, result
имеет значение True
. Если строка не удовлетворяет шаблону, result
имеет значение False
. Если оба string
и pattern
являются пустыми строками, результатом является True
.
Метод сравнения
Поведение Like
оператора зависит от оператора Option Compare. Метод сравнения строк по умолчанию для каждого исходного файла.Option Compare Binary
Параметры шаблона
Встроенное сопоставление шаблонов предоставляет универсальный инструмент для сравнения строк. Функции сопоставления шаблонов позволяют сопоставлять каждый символ с string
определенным символом, диким карта символом, списком символов или диапазоном символов. В следующей таблице показаны символы, разрешенные pattern
и соответствующие.
Символы в pattern |
Совпадения в string |
---|---|
? |
Любой одиночный символ |
* |
Ноль или больше символов |
# |
Любая одна цифра (0–9) |
[charlist] |
Любой отдельный символ в charlist |
[!charlist] |
Ни один символ не в charlist |
Списки символов
Группу одного или нескольких символов () в квадратных скобках (charlist
[ ]
) можно использовать для сопоставления любого одного символа и string
может содержать почти любой код символов, включая цифры.
Восклицательный знак (!
) в начале charlist
означает, что совпадение выполняется, если какой-либо символ, кроме символов, charlist
найденных в string
. При использовании за пределами квадратных скобок восклицательный знак соответствует самому себе.
Специальные символы
Чтобы соответствовать специальным символам левую скобку ([
), вопросительный знак (), знак номера (?
#
) и звездочку (*
), заключите их в квадратные скобки. Правая скобка (]
) не может использоваться внутри группы для сопоставления себя, но ее можно использовать вне группы в качестве отдельного символа.
Последовательность символов []
считается строкой нулевой длины (""
). Однако она не может быть частью списка символов, заключенного в квадратные скобки. Если вы хотите проверка, содержит ли позиция string
одну из групп символов или символов вообще, можно использовать Like
дважды. Пример см. в разделе "Практическое руководство. Сопоставление строки с шаблоном".
Диапазоны символов
Используя дефис (–
) для разделения нижних и верхних границ диапазона, charlist
можно указать диапазон символов. Например, приводит к совпадению, [A–Z]
если соответствующая позиция символа содержит string
любой символ в диапазоне A
иZ
[!H–L]
приводит к совпадению, если соответствующая позиция символа содержит любой символ за пределами диапазона H
.L
.
При указании диапазона символов они должны отображаться в порядке сортировки по возрастанию, то есть от самого низкого до самого высокого. Таким образом, [A–Z]
является допустимым шаблоном, но [Z–A]
не является.
Несколько диапазонов символов
Чтобы указать несколько диапазонов для одной и той же позиции символов, поместите их в одни и те же скобки без разделителей. Например, приводит к совпадению, [A–CX–Z]
если соответствующая позиция символа содержит любой символ в A
string
диапазоне илиC
диапазоне.Z
X
Использование дефиса
Дефис (–
) может отображаться в начале (после восклицательного знака, если таковой charlist
имеется) или в конце самого соответствия. В любом другом расположении дефис определяет диапазон символов, разделенных символами на обеих сторонах дефиса.
Сортировка последовательности
Значение указанного диапазона зависит от упорядочения символов во время выполнения, как определено Option Compare
и языковым стандартом системы, на котором выполняется код. С Option Compare Binary
, диапазон [A–E]
совпадает A
, B
, C
и D
E
. СOption Compare Text
, [A–E]
совпадениямиa
à
B
C
b
c
D
À
A
, , d
E
и .e
Диапазон не совпадает Ê
или ê
потому, что акцентированные символы сопоставляются после неподцененных символов в порядке сортировки.
Символы диграфа
На некоторых языках есть алфавитные символы, представляющие два отдельных символа. Например, несколько языков используют символ æ
для представления символов и e
при их отображении a
вместе. Оператор Like
распознает, что один символ диграфа и два отдельных символа эквивалентны.
Если язык, использующий символ диграфа, указан в параметрах языкового стандарта системы, вхождение одного символа диграфа в одной pattern
или string
совпадает с эквивалентной двухзначной последовательностью в другой строке. Аналогичным образом, символ диграфа в pattern
квадратных скобках (само по себе, в списке или в диапазоне) соответствует эквивалентной двухзначной последовательности в string
.
Перегрузка
Оператор Like
может быть перегружен, что означает, что класс или структура могут переопределить его поведение, если операнда имеет тип этого класса или структуры. Если код использует этот оператор в таком классе или структуре, убедитесь, что вы понимаете его переопределенное поведение. Для получения дополнительной информации см. Operator Procedures.
Пример
В этом примере оператор используется 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*"