Функции IsMatch, Match и MatchAll

Применимо к: Приложениям Canvas Приложениям на основе моделей Power Pages Power Platform CLI

Проверяет совпадение или извлекает части текстовой строки на основе шаблона.

Описание

Функция IsMatch проверяет, соответствует ли текстовая строка шаблону, который может содержать обычные символы, предварительно определенные шаблоны или регулярное выражение. Функции Match иnd MatchAll возвращают найденные совпадения, включая частичные совпадения.

Используйте IsMatch, чтобы проверить, что пользователь ввел в элемент управления Text input. Например, можно проверить, ввел ли пользователь допустимый адрес электронной почты, перед сохранением результата в источник данных. Если запись не соответствует условиям, добавьте другие элементы управления, которые напомнят пользователю, что запись необходимо исправить.

Используйте Match, чтобы извлечь первую текстовую строку, которая соответствует шаблону, и MatchAll, чтобы извлечь все текстовые строки, которые соответствуют. Вы также можете извлечь частичные совпадения для анализа сложных строк.

Match возвращает запись информации для первого найденного совпадения, а MatchAll возвращает таблицу записей для каждого найденного совпадения. Запись или записи содержат:

Столбец Тип Описание
именованные суб-совпадения или суб-совпадения Текст Каждое именованное частичное совпадение будет иметь собственный столбец. Создайте именованное частичное совпадение с помощью регулярного выражения (?<имя>...). Если именованное частичное совпадение имеет то же имя, что и один из предварительно определенных столбцов (ниже), частичное совпадение имеет приоритет, и генерируется предупреждение. Чтобы избежать этого предупреждения, переименуйте частичное совпадение.
FullMatch Text Вся текстовая строка, которая была сопоставлена.
Начать матч Номер Начальная позиция совпадения во входной текстовой строке. Первый символ строки возвращает 1.
Субсовпадения Таблица с одним столбцом текста (столбец Value) Таблица именованных и неименованных частичных совпадений в порядке их появления в регулярном выражении. Как правило, с именованными частичными совпадениями легче работать, поэтому они поощряются. Используйте функцию ForAll или функции Last( FirstN( ... ) ) для работы с отдельными частичными совпадениями. Если в регулярном выражении не определены никакие частичные совпадения, эта таблица будет присутствовать, но будет пустой.

Эти функции поддерживают MatchOptions. По умолчанию:

  • Эти функции выполняют поиск с учетом регистра. Используйте MatchOptions.IgnoreCase для поиска совпадений независимо от регистра.
  • IsMatch соответствует всей текстовой строке (Complete MatchOption), тогда как Match и MatchAll ищут совпадение в любом месте текстовой строки (Contains MatchOption). Используйте Complete, Contains, BeginsWith или EndsWith в соответствии со своим сценарием.

IsMatch возвращает true если текстовая строка соответствует шаблону или false если нет. Match возвращает пустое значение , если совпадений не найдено, что можно проверить с помощью функции IsBlank . MatchAll возвращает пустую таблицу, если совпадений не найдено, что можно проверить с помощью функции IsEmpty .

Если вы используете MatchAll, чтобы разбить текстовую строку, рассмотрите возможность использования функции Split, которая проще в использовании и быстрее.

Шаблоны

Ключом к использованию этих функций является описание шаблона для сопоставления. Опишите шаблон в текстовой строке в виде следующей комбинации:

  • Обычные символы, такие как "abc" или "123".
  • Предопределенные шаблоны, такие как Letter, MultipleDigits или Email. (Эти шаблоны определяет перечисление Match.)
  • Коды регулярных выражений, например "\d+\s+\d+" или "[a-z]+".

Комбинируйте эти элементы с помощью оператора объединения строк &. Например, "abc" & Digit & "\s+" является допустимым шаблоном, который соответствует символам "a", "b" и "c" с последующей цифрой от 0 до 9, за которой следует по крайней мере один пробел.

Обычные символы

Самый простой шаблон — это последовательность из обычных символов, которые должны точно совпадать.

Например, при использовании с функцией IsMatch, строка "Привет" соответствует шаблону "Привет" точно. И никак иначе. Строка "привет!" не соответствует шаблону из-за восклицательного знака в конце и из-за неверного регистра буквы "п". (Способы изменения этого поведения см. в разделе Параметры поиска совпадения.)

В языке шаблона некоторые символы зарезервированы для особых целей. Чтобы использовать эти символы, либо используйте перед знаком \ (обратную косую черту), чтобы указать, что символ должен восприниматься буквально, либо используйте один из предопределенных шаблонов, описанных далее в этой теме. В следующей таблице перечислены специальные символы.

Специальный знак Описание
. точка
? вопросительный знак
* звездочка
+ плюс
( ) круглые скобки
[ ] квадратные скобки
{ } фигурные скобки
^ крышка
$ знак доллара
| вертикальная черта
\ обратная косая черта

Например, вы можете сопоставить «Привет?» с помощью шаблона "Привет\?" с обратной косой чертой перед знаком вопроса.

Предопределенные шаблоны

Предопределенные шаблоны предоставляют простой способ сопоставления либо с одним из наборов символов либо с последовательностью из нескольких символов. Используйте оператор объединения строк &, чтобы объединить собственные текстовые строки с перечислением Match:

Перечисление Match Описание Регулярное выражение
Любой Соответствует любому символу. .
Запятая Соответствует запятой. ,
Цифра Соответствует числу (от 0 до 9). \d
Электронная почта Соответствует адресу электронной почты, который содержит символ "@" и имя домена с точкой (".") .+\@.+\\.[^\\.]{2,}
Дефис Соответствует дефису. \-
ЛеваяПара Соответствует левой круглой скобке "(". \(
Письмо Соответствует букве. \p{L}
Несколько цифр Соответствует одной или нескольким цифрам. \d+
НесколькоБуквы Соответствует одной или нескольким буквам. \p{L}+
МножественныеНеПробелы Соответствует одному или нескольким символам, которые не добавляют пробел (не пробел, не табуляция, не новая строка). \S+
МножественныеПространства Соответствует одному или нескольким символам, которые добавляют пробел (пробел, табуляция или новая строка). \s+
Непространственный Соответствует одному знаку, который не добавляет пробел. \S
Необязательныецифры Соответствует отсутствующей, одной или нескольким цифрам. \d*
Необязательные буквы Соответствует отсутствующей, одной или нескольким буквам. \p{L}*
НеобязательныеNonSpaces Соответствует отсутствующему, одному или нескольким символам, которые не добавляют пробел. \S*
НеобязательныеПробелы Соответствует отсутствующему, одному или нескольким символам, которые добавляют пробел. \s*
Период Соответствует точке ("."). \.
RightParen Соответствует правой круглой скобке ")". \)
Космос Соответствует символу, который добавляет пробел. \s
Вкладка Соответствует символу табуляции. \t

Например, шаблон "A" & MultipleDigits будет соответствовать букве "A", за которой следует одна или несколько цифр.

Регулярные выражения

Шаблон, который используют эти функции, является регулярным выражением. Обычные символы и предварительно определенные шаблоны, описанные ранее в этой теме, можно использовать для создания регулярных выражений.

Регулярные выражения очень эффективны и доступны во многих языках программирования для использования в самых разных целях. Они также часто могут выглядеть как случайная последовательность знаков препинания. В данной статье не описываются все аспекты регулярных выражений, но в Интернете достаточное количество информации, руководств и инструментов на эту тему.

Регулярные выражения имеют различные диалекты. В Power Apps используется вариант диалекта JavaScript. См. синтаксис регулярного выражения для введения в синтаксис. Именованные частичные совпадения (иногда называемые именованными группами захвата) поддерживаются:

  • Именованные частичные совпадения: (?<имя> ...)
  • Именованные обратные ссылки: \k<имя>

Таблица перечисления Match ранее в этой тема каждое перечисление появляется в той же строке, что и соответствующее ему регулярное выражение.

Параметры сопоставления

Можно изменить поведение этих функций, указав один или несколько параметров, которые можно комбинировать с помощью оператора объединения строк (&).

Перечисление MatchOptions Description Влияние на регулярное выражение
MatchOptions.BeginsWith Шаблон должен совпадать с самого начала текста. Добавляет ^ в начало регулярного выражения.
MatchOptions.Complete По умолчанию для функции IsMatch. Шаблон должен соответствовать всей строке текста от начала и до конца. Добавляет ^ в начало и $ в конец регулярного выражения.
MatchOptions.Содержит По умолчанию для Match и MatchAll. Шаблон должен присутствовать где-нибудь в тексте, но не обязательно в начале или в конце. Не изменяет регулярного выражения.
MatchOptions.EndsWith Шаблон должен совпадать с конца строки текста. Добавляет $ в конец регулярного выражения.
MatchOptions.ИгнорироватьРегистр Обрабатывает прописные и строчные буквы как идентичные. По умолчанию при поиске совпадения учитывается регистр. Не изменяет регулярного выражения. Этот параметр является эквивалентом стандартного модификатора "i" для регулярных выражений.
MatchOptions.Многострочный Выполняет сопоставление по нескольким строкам. Не изменяет регулярного выражения. Этот параметр является эквивалентом стандартного модификатора "m" для регулярных выражений.

Использование MatchAll эквивалентно использованию стандартного модификатора "g" для регулярных выражений.

Синтаксис

IsMatch ( Текст, Шаблон [, Параметры ] )

  • Текст – Обязательно. Текстовая строка для проверки.
  • Шаблон - Необходимый. Шаблон для проверки в виде текстовой строки. Связывает предопределенные шаблоны, которые определяет перечисление Match, или предоставляет регулярное выражение. Шаблон должна быть постоянной формулой без каких-либо переменных, источников данных или других динамических ссылок, которые изменяются по мере работы приложения.
  • Параметры - Необязательный. Сочетание значений перечисления MatchOptions в виде текстовой строки. По умолчанию используется MatchOptions.Complete.

Соответствовать ( Текст, Шаблон [, Параметры ] )

  • Текст – Обязательно. Текстовая строка для сопоставления.
  • Шаблон - Необходимый. Шаблон для сопоставления в виде текстовой строки. Связывает предопределенные шаблоны, которые определяет перечисление Match, или предоставляет регулярное выражение. Шаблон должна быть постоянной формулой без каких-либо переменных, источников данных или других динамических ссылок, которые изменяются по мере работы приложения.
  • Параметры - Необязательный. Сочетание значений перечисления MatchOptions в виде текстовой строки. По умолчанию используется MatchOptions.Contains.

MatchAll ( Текст, Шаблон [, Параметры ] )

  • Текст – Обязательно. Текстовая строка для сопоставления.
  • Шаблон - Необходимый. Шаблон для сопоставления в виде текстовой строки. Связывает предопределенные шаблоны, которые определяет перечисление Match, или предоставляет регулярное выражение. Шаблон должна быть постоянной формулой без каких-либо переменных, источников данных или других динамических ссылок, которые изменяются по мере работы приложения.
  • Параметры - Необязательный. Сочетание значений перечисления MatchOptions в виде текстовой строки. По умолчанию используется MatchOptions.Contains.

Примеры IsMatch

Обычные символы

Представьте, что приложение содержит элемент управления Text input с именем TextInput1. Пользователь вводит значения в этот элемент управления для сохранения в базе данных.

Пользователь вводит Hello world в TextInput1.

Формула Описание Результат
IsMatch( TextInput1.Text, "Hello world" ) Проверяет, точно ли введенные данные соответствуют строке "Hello world". истинный
IsMatch( TextInput1.Text, "Good bye" ) Проверяет, точно ли введенные данные соответствуют строке "Good bye". ЛОЖЬ
IsMatch( TextInput1.Text, "hello", Contains ) Проверяет, содержат ли введенные данные слово "hello" (с учетом регистра). ЛОЖЬ
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Проверяет, содержат ли введенные данные слово "hello" (без учета регистра). истинный

Предопределенные шаблоны

Формула Описание Результат
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) Соответствует номеру социального страхования США. истинный
IsMatch( "joan@contoso.com", Email ) Соответствует адресу электронной почты. истинный
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) Соответствует последовательности цифр, за которыми следует точка, а затем отсутствующая цифра или другие цифры. истинный
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) Соответствует последовательности цифр, за которыми следует точка, а затем отсутствующая цифра или другие цифры. Точки в тексте для соответствия нет, поэтому нет соответствия с этим шаблоном. ЛОЖЬ

Регулярные выражения

Формула Описание Результат
IsMatch( "986", "\d+" ) Соответствует целому числу больше нуля. истинный
IsMatch( "1.02", "\d+(\.\d\d)?" ) Обозначает положительную денежную сумму. Если входные данные содержат десятичный разделитель, после него также должны стоять две цифры. Например, 3,00 является допустимым значением, а 3,1 — нет. истинный
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) Обозначает положительную или отрицательную денежную сумму. Если входные данные содержат десятичный разделитель, после него также должны стоять две цифры. истинный
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) Соответствует номеру социального страхования США. Проверяет формат, тип и длину указанного поля ввода. Сопоставляемая строка должна состоять из трех цифр, за которыми идет дефис, две цифры, дефис и еще четыре цифры. истинный
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) Аналогично предыдущему примеру, но во входных данных отсутствует один из дефисов. ЛОЖЬ
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) Проверяет надежность пароля, который должен содержать восемь, девять или 10 символов, минимум одну цифру и по крайней мере одну букву. Строка не должна содержать специальные символы. ЛОЖЬ

Примеры Match и MatchAll

Формула Описание Результат
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" Извлекает из контактной информации только часть, соответствующую электронной почте. {
email: "bob.jones@contoso.com",
FullMatch: "<bob.jones@contoso.com>",
SubMatches: [ "bob.jones@contoso.com" ],
StartMatch: 11
}
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" Извлекает из контактной информации только часть, соответствующую электронной почте. Допустимый адрес не найден (нет знака @), поэтому функция возвращает значение blank. пустой
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) Извлекает части языка, скрипта и региона из тега языка, который возвращает функция Language. Эти результаты отражают Соединенные Штаты; дополнительные примеры см. в документации по функции Language. Оператор (?: группирует символы, не создавая другого частичного соответствия. {
language: "en",
script: blank,
region: "US",
FullMatch: "en-US",
SubMatches: [ "en", "", "US" ],
StartMatch: 1
}
Match( "PT2H1M39S", "PT(?:<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ) Извлекает часы, минуты и секунды из значения продолжительности ISO 8601. Извлеченные числа все еще находятся в текстовой строке; используйте функцию Value для преобразования его в число перед выполнением математических операций. {
hours: "2",
minutes: "1",
seconds: "39",
FullMatch: "PT2H1M39S",
SubMatches:["2","1","39"],
StartMatch: 1
}

Давайте подробнее рассмотрим этот последний пример. Если вы хотите преобразовать эту строку в значение даты и времени, используя функцию Time, вы должны передать в нее именованные частичные совпадения индивидуально. Для этого вы можете использовать функцию With, которая работает с записью, возвращаемой функцией Match:

With(
    Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
   Time( Value( hours ), Value( minutes ), Value( seconds ) )
)

Для этих примеров добавьте элемент управления Button, задайте для его свойства OnSelect эту формулу, а затем выберите кнопку:

Set( pangram, "The quick brown fox jumps over the lazy dog." )
Формула Описание Результат
Match( pangram, "THE", IgnoreCase ) Найти все совпадения с "THE" в текстовой строке, которую содержит переменная pangram. Строка содержит два совпадения, но возвращается только первое, потому что вы используете функцию Match, а не MatchAll. Столбец SubMatches пуст, потому что никакие частичные совпадения не были определены. {
FullMatch: "The",
SubMatches: [ ],
StartMatch: 32
}
MatchAll( pangram, "the" ) Найти все совпадения с "the" в текстовой строке, которую содержит переменная pangram. Тест чувствителен к регистру, поэтому найден только второй экземпляр "the". Столбец SubMatches пуст, потому что никакие частичные совпадения не были определены. MatchAll для pangram.
MatchAll( pangram, "the", IgnoreCase ) Найти все совпадения с "the" в текстовой строке, которую содержит переменная pangram. В этом случае тест нечувствителен к регистру, поэтому найдены оба вхождения слова. Столбец SubMatches пуст, потому что никакие частичные совпадения не были определены. MatchAll с IgnoreCase.
MatchAll( pangram, "\b\wo\w\b" ) Находит все слова из трех букв с буквой "o" в середине. Обратите внимание, что слово "brown" исключено, потому что это не слово из трех букв и, следовательно, не соответствует условию "\b" (граница слова). MatchAll для pangram с b, wo, w и b.
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) Соответствует всем символам между "fox" и "dog". {
between: "jumps over the lazy",
FullMatch: "fox jumps over the lazy dog",
SubMatches: [ "jumps over the lazy" ],
StartMatch: 17
}

Чтобы увидеть результаты функции MatchAll в коллекции:

  1. В пустой экран вставьте пустой вертикальный элемент управления Gallery.

  2. Установите для свойства Items коллекции значение MatchAll( pangram, "\w+" ) или MatchAll( pangram, MultipleLetters ).

    Коллекция элементов.

  3. Выберите "Добавить элемент с вкладки «Вставка»" в центре элемента управления коллекции, чтобы выбрать шаблон коллекции.

  4. Добавьте элемент управления Label к шаблону коллекции.

  5. Задайте для свойства Text метки выражение ThisItem.FullMatch.

    Коллекция заполняется каждым словом в нашем примере текста. Измените размер шаблона коллекции и элемента управления Label, чтобы увидеть все слова на одном экране.

    Свойство «Text».