IsMatch, Matchі MatchAll функції

Застосовується до: Програми Canvas Copilot Studio Model-driven apps Power Platform CLI Dataverse functions Power Pages

Перевіряє відповідність або видобуває частини текстового рядка на основі шаблону.

Опис

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

Використовується IsMatch для перевірки введених користувачем елементів керування введенням тексту . Наприклад, переконайтеся, що користувач ввів припустиму адресу електронної пошти перед збереженням результату у джерелі даних. Якщо запис не відповідає умовам, додайте інші елементи керування, які пропонуватимуть користувачу виправити цей запис.

Використовується Match , щоб видобути перший текстовий рядок, який відповідає шаблону, і MatchAll видобути всі текстові рядки, які відповідають. Видобути підмати, щоб проаналізувати складні рядки.

Match повертає запис відомостей про перший знайдений збіг і MatchAll повертає таблицю записів для кожного знайденого збігу. У записі або записах міститься нижченаведене.

Column Ввести Опис
іменовані підматчі або підматчі SMS Кожен іменований підматч має власний стовпець. Створення іменованого підмату за допомогою (?<Ім'я>... ) у звичайному виразі. Якщо іменований підматч має таке саме ім'я, як і один із попередньо визначених стовпців, він має пріоритет і створюється попередження. Перейменуйте вкладений формат, щоб уникнути цього попередження.
Повний матч SMS Весь текстовий рядок, щодо якого було знайдено збіг.
Стартовий матч Номер Початкове розташування збігу в межах уведеного текстового рядка. Перший символ рядка повертає 1.
Підмати, лише якщо використовується MatchOptions.NumberedSubMatches . Таблиця з одним стовпцем і текстом (стовпець Value (Значення)) Таблиця нумерованих підматів у тому порядку, у якому вони відображаються в регулярному виразі. Зазвичай іменовані підмати легше працювати з іншими користувачами. Використовуйте функцію ForAll або Index , щоб працювати з окремим підматом. Якщо в регулярному виразі не визначено вкладені відповіді, ця таблиця буде пуста.

Ці функції підтримують MatchOptions. За замовчуванням зазначені функції виконують таке.

  • Ці функції здійснюють пошук збігів з урахуванням регістру. Використовуйте MatchOptions.IgnoreCase для виконання матчів без врахування регістру.
  • IsMatch відповідає всьому текстовому рядку (Complete MatchOption), а потім MatchMatchAll пошукайте збіг будь-де в текстовому рядку (містить matchOption). Використовуйте функції Complete, Contains, BeginsWith або EndsWith залежно від конкретної ситуації.

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

Якщо використовується MatchAll для розділення текстового рядка, радимо використовувати функцію Split , що простіше та швидше.

Шаблони

Ключ до використання цих функцій полягає в описі шаблону, для якого потрібно знайти збіг. Шаблон описується в текстовому рядку як поєднання таких елементів:

  • звичайних символів, як-от «абв» або «123»;
  • попередньо визначених шаблонів, як-от Letter, MultipleDigits або Email (Перелічення Match визначає ці закономірності).)
  • кодів регулярних виразів, як-от «\d+\s+\d+» або «[a-z]+».

Поєднуйте ці елементи за допомогою оператора об'єднання рядків .. Наприклад, "abc" & Digit & "\s+" є коректним зразком, який відповідає символам "a", "b" і "c", за якими слідує цифра від 0 до 9, за якою слідує принаймні один символ пробілу.

Звичайні символи

Найпростіший візерунок – це послідовність звичайних символів, які точно відповідають.

Наприклад, якщо використовується з функцієюIsMatch, рядок "Привіт" точно відповідає шаблону "Привіт". Не більше і не менше. Рядок "hello!" не відповідає шаблону через знак оклику на кінці, і тому, що справа неправильна для букви "h". (Див.Match параметри для змінення цієї поведінки).)

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

Попередньо визначені шаблони

Попередньо визначені шаблони забезпечують простий спосіб зіставлення одного з символів у наборі або послідовності кількох символів. Використовуйте оператор об'єднання рядків , щоб поєднати власні текстові рядки з учасниками Match нуму:

Match enum (перелік) Опис Регулярний вираз
Будь-які Шукає збіг для будь-якого символу. .
Кома Відповідає комі ,. ,
Значний Шукає збіг для однієї цифри (від 0 до 9). \d
Електронна пошта Шукає збіг для адреси електронної пошти, що містить символ «@», а також ім’я домену, що включає крапку («.»). Переглянути нотатку
Дефіс Шукає збіг для дефіса. - Переглянути нотатку
Лівий парен Збігається з лівою дужкою (. \(
Буква Шукає збіг для літери. \p{L}
Багатозначні числа Шукає збіг для однієї або кількох цифр. \d+
Множинні літери Шукає збіг для однієї або кількох літер. \p{L}+
MultipleNonSpaces Шукає збіг для одного або кількох символів, які не додають пробіл (тобто виключаються символи пробілу, табуляції або нового рядка). \S+
MultipleSpaces Шукає збіг для одного або кількох символів, що додають пробіл (тобто символів пробілу, табуляції або нового рядка). \s+
Непробіл Шукає збіг для одного символу, що не додає пробіл. \S
Необов’язкові цифри Шукає збіг для однієї або кількох цифр, а також для відсутньої цифри. \d*
Необов’язкові літери Шукає збіг для однієї або кількох літер, а також для відсутньої літери. \p{L}*
OptionalNonSpaces Шукає збіг для відсутнього, одного або кількох символів, які не додають пробіл. \S*
Необов’язкові пробіли Шукає збіг для відсутнього, одного або кількох символів, що додають пробіл. \s*
Період Збігається з крапкою або крапкою .. \.
Правий парен Збігається з правою дужкою ). \)
Простір Шукає збіг для символу, що додає пробіл. \s
Вкладку Відповідає символу табуляції. \t

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

У програмах Power Apps використовується інше визначення для Match. Повідомлення електронної пошти та Match. Дефіс. Оцініть Text( Match.Email ) , щоб переглянути регулярний вираз, який використовується хостом.

Регулярні вирази

Шаблон, який використовуються цими функціями, називається регулярним виразом. Конкретний діалект регулярних виразів Power Fx докладно описано в розділі Регулярні вирази в Power Fx.

Регулярні вирази є потужними і служать широкому спектру цілей. Вони також можуть виглядати як випадкова послідовність розділових знаків. У цій статті описано не всі аспекти регулярних виразів, але в Інтернеті можна знайти безліч інформації, навчальних посібників та інструментів.

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

Як наслідок, деякі регулярні вирази, які можуть працювати в інших середовищах, можуть бути заблоковані або потребують налаштування в Power Fx. Повідомлення про помилки під час створення відображаються у разі виявлення непідтримуваних функцій. Це одна з причин того, що регулярний вираз і параметри мають бути константою часу створення, а не динамічною (наприклад, у змінної).

Нотатка

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

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

Функція Приклад Опис
Клас символів із префінованими символами \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.ПочинаєтьсяЗ Шаблон має збігатися з початку тексту. Додає ^ на початку регулярного виразу.
MatchOptions.Complete Стандартне значення в IsMatch надбудові Power Apps. Шаблон відповідає всьому рядку тексту від початку до кінця. Додає ^ на початку та $ в кінці регулярного виразу.
MatchOptions.Містить За замовчуванням для Match програм Power Apps і MatchAllIsMatch за її межами. Шаблон має з’являтися десь усередині тексту, але не повинен починати або закінчувати його. Не змінює регулярний вираз.
MatchOptions.DotAll Змінює поведінку . оператора (dot) відповідно до всіх символів, зокрема символів нового рядка. Недоступно в надбудові Power Apps. Не змінює регулярний вираз. Цей параметр є еквівалентом стандартного модифікатора "s" для регулярних виразів.
MatchOptions.Закінчується на Шаблон має збігатися з кінцем рядка тексту. Додає $ в кінці регулярного виразу.
MatchOptions.FreeSpacing Символи пробілів, зокрема нові лінії, ігноруються в регулярному виразі. Примітки в кінці рядка, які починаються з a, # ігноруються. Недоступно в надбудові Power Apps. Змінюється лише синтаксис регулярного виразу. Цей параметр еквівалентний стандартному модифікатору "x" для регулярних виразів.
MatchOptions.IgnoreCase Обробляє літери у верхньому та нижньому регістрах як ідентичні. За замовчуванням під час зіставлення враховується регістр. Не змінює регулярний вираз. Цей варіант еквівалентний використанню стандартного модифікатора «i» для регулярних виразів.
MatchOptions.Multiline Змінює поведінку ^ та $ відповідає в кінці рядка. Не змінює регулярний вираз. Цей варіант еквівалентний використанню стандартного модифікатора «m» для регулярних виразів.
MatchOptions.NumberedSubMatches Краще використовувати іменовані знімки, оскільки їх легше зрозуміти та підтримувати. Продуктивність також підвищується, оскільки непотрібні знімки не зберігаються. Але для попередніх регулярних виразів кожен набір дужок розглядається як нумерований запис, який у результаті входить до таблиці SubMatches . Стандартне значення в надбудові Power Apps. Не змінює регулярний вираз. Іменовані знімки вимкнуто, а \1 посилання на стиль назад увімкнуто.

Використовується MatchAll так само, як і використання стандартного модифікатора "g" для регулярних виразів.

Синтаксис

IsMatch( Текст, Візерунок [, Параметри ] )

  • Текст– обов’язковий. Текстовий рядок для перевірки.
  • Візерунок – обов’язковий. Шаблон для перевірки як текстового рядка. Об'єднання попередньо визначених шаблонів, які Match перелічення визначає або надає регулярний вираз. Шаблон має бути постійною формулою без змінних, джерел даних або інших динамічних посилань, які змінюються під час запуску програми. Зверніть увагу, що формула має бути виражена як "Match. PredefinedPattern", наприклад Match. Електронна пошта
  • Опції – необов’язкові. Комбінація значень перелічення MatchOptions як текстовий рядок. За замовчуванням використовується MatchOptions.Complete. Параметри мають бути постійною формулою без змінних, джерел даних або інших динамічних посилань, які змінюються під час запуску програми.

Match( Текст, Візерунок [, Параметри ] )

  • Текст– обов’язковий. Текстовий рядок для зіставлення.
  • Візерунок – обов’язковий. Шаблон для зіставлення як текстового рядка. Об'єднайте попередньо визначені закономірності, які Match визначає нум, або надайте регулярний вираз. Шаблон має бути постійною формулою без будь-яких змінних, джерел даних або інших динамічних посилань, які змінюються під час роботи програми.
  • Опції – необов’язкові. Комбінація значень перелічення MatchOptions як текстовий рядок. За замовчуванням використовується MatchOptions.Contains. Параметри мають бути постійною формулою без змінних, джерел даних або інших динамічних посилань, які змінюються під час запуску програми.

MatchAll( Текст, Візерунок [, Параметри ] )

  • Текст– обов’язковий. Текстовий рядок для зіставлення.
  • Візерунок – обов’язковий. Шаблон для зіставлення як текстового рядка. Об'єднання попередньо визначених шаблонів, які Match перелічення визначає або надає регулярний вираз. Шаблон має бути постійною формулою без змінних, джерел даних або інших динамічних посилань, які змінюються під час запуску програми.
  • Опції – необов’язкові. Комбінація значень перелічення MatchOptions як текстовий рядок. За замовчуванням використовується MatchOptions.Contains. Параметри мають бути постійною формулою без змінних, джерел даних або інших динамічних посилань, які змінюються під час запуску програми.

IsMatch Приклади

Звичайні символи

Уявіть, що програма має елемент керування введенням тексту з іменем 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", Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit ) Шукає збіг для номера соціального страхування, США Справжній
IsMatch( "joan@contoso.com", 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 <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>") Видобуває з контактних відомостей тільки адресу електронної пошти. {
Електронна пошта: «bob.jones@contoso.com»,
FullMatch: "<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,
регіон: "США",
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 ) )
)

Для цих прикладів додайте елемент керування Кнопка, настройте його властивість OnSelect відповідно до нижчезазначеної формули, а потім натисніть кнопку.

Set( pangram, "The quick brown fox jumps over the lazy dog." )
Формула Опис Результат
Match( pangram, "THE", IgnoreCase ) Пошук усіх збігів для артикля «THE» в текстовому рядку, що містить змінну «панграма». Рядок містить два збіги, але лише перший повертається, тому що ви використовуєте Match , а не MatchAll. {
FullMatch: "The",
StartMatch: 32
}
MatchAll( pangram, "the" ) Пошук усіх збігів для артикля «the» в текстовому рядку, що містить змінну «панграма». У цій перевірці враховується регістр, тому повертається тільки другий знайдений артикль «the». MatchAll для панорамування.
MatchAll( pangram, "the", IgnoreCase ) Пошук усіх збігів для артикля «the» в текстовому рядку, що містить змінну «панграма». У цьому випадку регістр не враховується, тому повертаються обидва знайдені артиклі. 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» (собака). {
між: "jumps over the lazy",
FullMatch: "fox jumps over the lazy dog",
Початокматч: 17
}

Щоб переглянути результати в колекції MatchAll , виконайте наведені нижче дії.

  1. На пустому екрані вставте пустий вертикальний елемент керування колекцією .

  2. Установіть для властивості Елементи колекції значенняMatchAll (панграма, "\w+" ) або MatchAll(панграма, multipleLetters ).

    Галерея елементів.

  3. Виберіть пункт «Додати елемент із вкладки вставлення» в центрі елемента керування «Галерея», щоб вибрати шаблон галереї.

  4. Додайте до шаблону галереї елемент керування Підпис.

  5. Укажіть для властивості Text елемента керування «Підпис» значення ThisItem.FullMatch.

    Галерея заповнюється кожним словом з нашого прикладу тексту. Щоб переглянути всі слова на одному екрані, змініть розмір шаблону колекції та елемента керування надписами.

    Властивість тексту.