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


IsMatch, и MatchMatchAll функции

Применимо к: Приложения На основе холста Приложения Copilot Studio, управляемые моделью приложения Power Platform CLI Dataverse, функции Power Pages

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

Описание

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

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

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

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

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

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

  • Эти функции выполняют поиск с учетом регистра. Используйте MatchOptions.IgnoreCase для поиска совпадений независимо от регистра.
  • IsMatch соответствует всей текстовой строке (Complete MatchOption), а также MatchMatchAll ищет совпадение в любом месте текстовой строки (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 функцией строка Hello точно соответствует шаблону Hello . И никак иначе. Строка "hello!" не соответствует шаблону из-за восклицательного знака в конце и потому, что дело неправильно для буквы "h". (См Match . параметры изменения этого поведения.)

На языке шаблонов символы зарезервированы . ? * + ( ) [ ] ^ $ | \ для специальных целей. Чтобы использовать эти символы, либо префикс символа с \ помощью (обратной косой черты), чтобы указать, что символ должен приниматься буквально или использовать один из предопределенных шаблонов. Например, можно сопоставить строку "Hello?" с помощью шаблона "Hello\\?" с обратной косой чертой перед вопросительным знаком.

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

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

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

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

Power Apps использует другое определение дляMatch . EMail и Match. Дефис. Оцените Text( Match.Email ) регулярное выражение, используемое узлом.

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

Шаблон, используемый этими функциями, называется регулярным выражением. Конкретный диалект регулярных выражений PowerFx подробно описан в регулярных выражениях в Power Fx.

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

Регулярные выражения имеют долгую историю и доступны во многих языках программирования. У каждого языка программирования есть свой диалект регулярных выражений, и стандартов немного. Мы стремимся обеспечить одинаковый регулярный результат для всех реализаций Power Fx. Совместимость обеспечить непросто, поскольку Power Fx работает поверх JavaScript и .NET, которые имеют существенные различия. Для размещения на разных платформах регулярные выражения Power Fx ограничены подмножеством функций, которые широко поддерживаются в отрасли.

В результате некоторые регулярные выражения, которые могут работать в других средах, могут быть заблокированы или требуют настройки в Power Fx. Ошибки времени авторизации сообщаются при обнаружении неподдерживаемых функций. Это одна из причин, по которым регулярное выражение и параметры должны быть константой времени разработки, а не динамической (например, предоставленной в переменной).

Замечание

Power Apps использует более раннюю версию регулярных выражений Power Fx, которая имеет меньше ограничений, но и меньше функций. MatchOptions.DotAll и MatchOptions.FreeSpacing недоступны и определения Match. Электронная почта и Match. Дефис отличается. Суррогатные пары Unicode не рассматриваются как один символ. MatchOptions.NumberedSubMatches используется по умолчанию. Версия регулярных выражений, описанная здесь, будет доступна в Power Apps в ближайшее время в разделе "Совместимость PowerFx V1.0".

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

Функция Example Описание
Предопределенный класс символов \d Это регулярное выражение соответствует одному числу, например 1. Класс символов соответствует набору символов и соответствует стандартным цифрам, \d а также цифрам, определенным в категории символов 09 Юникода "Nd". Существуют классы символов для букв и чисел с \w пробелами, включая новые линии.\s Существуют также обратные классы символов, которые прописываются: \D соответствует всему, что \d не делает.
Один или несколько \d+ Это регулярное выражение соответствует одному или нескольким числам, таким как 123. После + элемента говорится "один или несколько" последнего элемента.
Ноль или один \+?\d Это регулярное выражение соответствует необязательному + знаку, за которым следует один или несколько чисел, например +123 просто 123. После ? того, как элемент говорит "это необязательно, он может произойти ноль или один раз". Перед + ним имеется обратная косая черта, чтобы отличить его как литеральный символ, а не "один или несколько" использования.
Группирование и изменение (-|\+)?\d+ Это регулярное выражение соответствует знаку + или -знаку , при необходимости, а затем ряду чисел, например -123, +123и 123. Мы представляем здесь две концепции, которые часто используются вместе. Во-первых, у нас есть скобки, которые группировать как набор элементов вместе, чтобы ? действовать. Во-вторых, у нас есть | слово "либо это, либо это".
Настраиваемый класс символов (-|\+)?\d+[eE][\-\+]?\d+ Это регулярное выражение добавляет экспонент в сочетание с двумя классами символов, соответствующими +123e-12. Класс символов похож | на изменение, предоставляющее "соответствие одной из этих вещей" в более компактной форме. Как и в +случае с , имеет особое значение в классах символов регулярного выражения, - поэтому нам нужно экранировать его.
Ноль или больше (-|\+)?\d+\.?\d*[eE][\-\+]?\d+ Это регулярное выражение добавляет десятичное значение после целочисленной части числа, например -123.456e-89 или -123.E+32. После \d десятичной запятой * имеет квантификатор, который говорит "ноль или больше раз" для десятичных цифр после .
Сбор групп (?&lt;number&gt;(-|\+)?\d+\.?\d*)[eE](?&lt;exponent&gt;[\-\+]?\d+) Наконец, мы добавим группы записи для number и exponent. Не только регулярное выражение соответствует всей строке, она также может извлекать части для использования в формулах, в этом случае часть перед e (или E) и частью после.

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

Match варианты

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

Перечисление MatchOptions Описание Влияние на регулярное выражение
MatchOptions.BeginsWith Шаблон должен совпадать с самого начала текста. Добавляет ^ в начало регулярного выражения.
MatchOptions.Complete Значение по умолчанию для IsMatch Power Apps. Шаблон соответствует всей строке текста от начала до конца. Добавляет ^ в начало и $ в конец регулярного выражения.
MatchOptions.Содержит По умолчанию для Match Power Apps и MatchAllIsMatch за ее пределами. Шаблон должен присутствовать где-нибудь в тексте, но не обязательно в начале или в конце. Не изменяет регулярного выражения.
MatchOptions.DotAll Изменяет поведение . оператора (dot) на соответствие всем символам, включая новые символы. Недоступно в Power Apps. Не изменяет регулярного выражения. Этот параметр эквивалентен стандартному модификатору "s" для регулярных выражений.
MatchOptions.EndsWith Шаблон должен совпадать с конца строки текста. Добавляет $ в конец регулярного выражения.
MatchOptions.FreeSpacing Символы пробелов, включая новые линии, игнорируются в регулярном выражении. Завершаемые комментарии, начинающие с a, # игнорируются. Недоступно в Power Apps. Изменяется только синтаксис регулярного выражения. Этот параметр эквивалентен стандартному модификатору "x" для регулярных выражений.
MatchOptions.ИгнорироватьРегистр Обрабатывает прописные и строчные буквы как идентичные. По умолчанию при поиске совпадения учитывается регистр. Не изменяет регулярного выражения. Этот параметр является эквивалентом стандартного модификатора "i" для регулярных выражений.
MatchOptions.Многострочный Изменяет поведение ^ и $ соответствие в конце линии. Не изменяет регулярного выражения. Этот параметр является эквивалентом стандартного модификатора "m" для регулярных выражений.
MatchOptions.NumberedSubMatches Именованные записи предпочтительнее, так как они проще понять и поддерживать. Производительность также улучшается, так как ненужные записи не сохраняются. Но для старых регулярных выражений обрабатывает каждый набор скобки как нумерованный захват, включенный в таблицу SubMatches в результате. Значение по умолчанию в Power Apps. Не изменяет регулярного выражения. Именованные записи отключены и \1 включены обратные ссылки на стиль.

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

Синтаксис

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

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

Match( Текст, шаблон [, параметры ] )

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

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

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

IsMatch Примеры

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

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

Пользователи введите мир Hello в 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", Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit ) Соответствует номеру социального страхования США. истинный
IsMatch( "[email protected]", Match.Email ) Соответствует адресу электронной почты. истинный
IsMatch( "123.456", Match.MultipleDigits & Match.Period & Match.OptionalDigits ) Соответствует последовательности цифр, за которыми следует точка, а затем отсутствующая цифра или другие цифры. истинный
IsMatch( "123", Match.MultipleDigits & Match.Period & Match.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 <[email protected]>", "<(?<email>" & Match.Email & ")>") Извлекает из контактной информации только часть, соответствующую электронной почте. {
email: "[email protected]",
FullMatch: "<[email protected]>",
StartMatch: 11
}
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" Извлекает из контактной информации только часть, соответствующую электронной почте. Допустимый адрес не найден (нет знака @), поэтому функция возвращает значение blank. пустой
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) Извлекает части языка, скрипта и региона из тега языка, который возвращает функция Language. Эти результаты отражают Соединенные Штаты; дополнительные примеры см. в документации по функции Language. Оператор (?: группирует символы, не создавая другого частичного соответствия. {
язык: "en",
script: blank,
регион: "США",
FullMatch: "en-US",
StartMatch: 1
}
Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ) Извлекает часы, минуты и секунды из значения продолжительности ISO 8601. Извлеченные числа все еще находятся в текстовой строке; используйте функцию Value для преобразования его в число перед выполнением математических операций. {
часы: "2",
минуты: "1",
секунды: "39",
FullMatch: "PT2H1M39S",
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используется. {
FullMatch: "The",
StartMatch: 32
}
MatchAll( pangram, "the" ) Найти все совпадения с "the" в текстовой строке, которую содержит переменная pangram. Тест чувствителен к регистру, поэтому найден только второй экземпляр "the". MatchAll для панграммы.
MatchAll( pangram, "the", IgnoreCase ) Найти все совпадения с "the" в текстовой строке, которую содержит переменная pangram. В этом случае тест нечувствителен к регистру, поэтому найдены оба вхождения слова. MatchAll с помощью IgnoreCase.
MatchAll( pangram, "\b\wo\w\b" ) Находит все слова из трех букв с буквой "o" в середине. "коричневый" исключается, потому что это не трехбуквенный слово и, следовательно, не соответствует "\b" (граница слова). MatchAll для панграммы с b, wo, w и b.
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) Соответствует всем символам между "fox" и "dog". {
между: "прыгает через ленивый",
FullMatch: "фоска прыгает над ленивой собакой",
StartMatch: 17
}

Чтобы просмотреть результаты коллекции, выполните следующие действия MatchAll .

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

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

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

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

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

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

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

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