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

Применимо к: приложениям на основе холста приложениям на основе модели интерфейс командной строки Power Platform

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

Описание

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

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

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

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

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

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

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

Если текстовая строка соответствует шаблону, IsMatch возвращает значение true, в противном случае — false. Match возвращается blank значение, если не найдено совпадений, что можно проверить с помощью функции 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 Описание Регулярное выражение
Any Соответствует любому символу. .
Comma Соответствует запятой. ,
Digit Соответствует числу (от 0 до 9). \d
Email Соответствует адресу электронной почты, который содержит символ "@" и имя домена с точкой (".") .+\@.+\\.[^\\.]{2,}
Hyphen Соответствует дефису. \-
LeftParen Соответствует левой круглой скобке "(". \(
Letter Соответствует букве. \p{L}
MultipleDigits Соответствует одной или нескольким цифрам. \d+
MultipleLetters Соответствует одной или нескольким буквам. \p{L}+
MultipleNonSpaces Соответствует одному или нескольким символам, которые не добавляют пробел (не пробел, не табуляция, не новая строка). \S+
MultipleSpaces Соответствует одному или нескольким символам, которые добавляют пробел (пробел, табуляция или новая строка). \s+
NonSpace Соответствует одному знаку, который не добавляет пробел. \S
OptionalDigits Соответствует отсутствующей, одной или нескольким цифрам. \d*
OptionalLetters Соответствует отсутствующей, одной или нескольким буквам. \p{L}*
OptionalNonSpaces Соответствует отсутствующему, одному или нескольким символам, которые не добавляют пробел. \S*
OptionalSpaces Соответствует отсутствующему, одному или нескольким символам, которые добавляют пробел. \s*
Period Соответствует точке ("."). \.
RightParen Соответствует правой круглой скобке ")". \)
Space Соответствует символу, который добавляет пробел. \s
Tab Соответствует символу табуляции. \t

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

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

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

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

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

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

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

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

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

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

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

Синтаксис

IsMatch( Text, Pattern [, Options ] )

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

Match( Text, Pattern [, Options ] )

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

MatchAll( Text, Pattern [, Options ] )

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

Примеры IsMatch

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

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

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

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

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

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

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

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

Примеры 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».