Поделиться через


Оператор Like

Используется для сравнения двух строк.

Синтаксис

результат = Шаблон stringLike

Синтаксис оператора Like состоит из следующих частей:

Part Описание
result Обязательный элемент; любая числовая переменная.
строка Обязательный элемент; любое строковое выражение.
pattern Обязательный элемент; любое строковое выражение, соответствующее соглашениям о сопоставлении шаблонов, описанным в разделе "Замечания".

Замечания

Если аргумент string соответствует аргументу pattern, значением result будет являться True; если не соответствует — значением result будет являться False. Если string либо pattern имеет значение Null, result также будет иметь значение Null.

Поведение оператора Like зависит от оператора Option Compare. Методом по умолчанию для сравнения строк для каждого модуля является Option Compare Binary.

Метод Option Compare Binary выдает результат сравнения строк на основе порядка сортировки, выводимого из внутреннего двоичного представления знаков. Порядок сортировки определяется кодовой страницей.

В следующем примере показан типичный бинарный порядок сортировки:

A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø

Метод Option Compare Text выдает результат сравнения строк на основе порядка сортировки текста без учета регистра букв, определяемого языковым стандартом системы. Сортировка тех же знаков с использованием метода Option Compare Text дает следующий порядок сортировки:

(A=a) < (À=à) < (B=b) < (E=e) < (Ê=ê) < (Z=z) < (Ø=ø)

Встроенное сопоставление шаблона предоставляет универсальное средство для сравнения строк. Возможности сопоставления шаблона позволяют использовать подстановочные знаки, списки знаков или диапазоны знаков в любой комбинации, чтобы сопоставить строки. В следующей таблице представлены знаки, разрешенные для использования в аргументе pattern, и объясняется, чему они соответствуют:

Знаки в pattern Сопоставление в string
? Любой отдельный знак.
* Ноль или больше знаков.
# Любая однозначная цифра (0–9).
[ charlist ] Любой отдельный знак, представленный в charlist.
[ !charlist ] Любой отдельный знак, не представленный в charlist.

Группа из одного или нескольких символов ( charlist ), заключенная в квадратные скобки ([ ]), может использоваться для сопоставления с любым одним символом в строке и может включать практически любой код символов, включая цифры.

Примечание.

Чтобы получить сопоставление для специальных знаков, а именно для левой квадратной скобки ([), вопросительного знака (?), знака номера (#) и звездочки (*), заключите их в квадратные скобки. Знак правой квадратной скобки (]) не может использоваться в рамках группы для сопоставления самому себе, однако может использоваться за пределами группы как отдельный знак.

С помощью дефиса (-), разделяющего нижнюю и верхнюю границы диапазона, charlist может использоваться для определения диапазона знаков. Например, приводит к совпадению, [A-Z] если соответствующая позиция символов в строке содержит прописные буквы в диапазоне от A до Z. Несколько диапазонов могут включаться в квадратные скобки без использования каких-либо разделителей.

Значение указанного диапазона зависит от порядка расположения знаков, допустимого во время выполнения (определяется оператором Option Compare и языковыми настройками системы, в которой выполняется код). В примере Option Compare Binary диапазон [A-E] соответствует A, B и E. С параметром Сравнение текста соответствует [A-E] A, a, À, à, B, B, E, e. Данный диапазон не определяет сопоставление для Ê или ê, поскольку символы с надстрочными знаками располагаются по порядку сортировки после символов без надстрочных знаков.

Также имеются другие важные правила для сопоставления шаблона:

  • Восклицательный знак (!) в начале charlist означает, что выполняется сопоставление, если любой знак, кроме знаков, указанных в charlist, будет найден в аргументе string. При использовании вне квадратных скобок восклицательный знак сопоставляется самому себе.
  • Дефис (-) может отображаться в начале (но после восклицательного знака, если он используется) или в конце charlist для сопоставления самому себе. На любой другой позиции дефис используется для указания диапазона знаков.
  • При задании диапазона знаков они должны отображаться по возрастающему порядку сортировки (от наименьшего к наибольшему). [A-Z] является допустимым шаблоном, но [Z-A] не является.
  • Последовательность [] символов считается строкой нулевой длины ("").

В некоторых языках имеются специальные знаки в алфавите, представляющие два отдельных знака. Например, в нескольких языках используется знак "æ" для представления знаков "a" и "e", когда они отображаются вместе. Оператор Like распознает, что такой отдельный специальный знак и соответствующие два отдельных знака являются эквивалентными.

Когда языки, в которых используются специальные знаки, указываются в языковых настройках системы, отдельный специальный знак в аргументе pattern либо в аргументе string сопоставляется с эквивалентной 2-знаковой последовательностью в другой строке. Аналогичным образом отдельный специальный знак в аргументе pattern, заключенный в квадратные скобки (указанный отдельно, в списке или в диапазоне), сопоставляется с эквивалентной 2-знаковой последовательностью в string.

Пример

В этом примере оператор Like используется для сравнения строки с шаблоном.

Dim MyCheck
MyCheck = "aBBBa" Like "a*a"    ' Returns True.
MyCheck = "F" Like "[A-Z]"    ' Returns True.
MyCheck = "F" Like "[!A-Z]"    ' Returns False.
MyCheck = "a2a" Like "a#a"    ' Returns True.
MyCheck = "aM5b" Like "a[L-P]#[!c-e]"    ' Returns True.
MyCheck = "BAT123khg" Like "B?T*"    ' Returns True.
MyCheck = "CAT123khg" Like "B?T*"    ' Returns False.
MyCheck = "ab" Like "a*b"    ' Returns True.
MyCheck = "a*b" Like "a [*]b"    ' Returns False.
MyCheck = "axxxxxb" Like "a [*]b"    ' Returns False.
MyCheck = "a [xyz" Like "a [[]*"    ' Returns True.
MyCheck = "a [xyz" Like "a [*"    ' Throws Error 93 (invalid pattern string).

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.