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


Функції IsMatch, Match та MatchAll

Застосовується до: програм Canvas Командного Power Pages Power Platform рядка на основі моделі

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

Опис

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

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

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

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

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

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

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

IsMatch повертає true , якщо текстовий рядок збігається зі зразком, або false , якщо ні. 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» (Привіт) точно відповідає шаблону «Hello». Не більше і не менше. Рядок «hello!» не відповідає шаблону через знак оклику в кінці та неправильний регістр літери «h». (Відомості про способи зміни цієї поведінки див. в розділі про перелічення MatchOptions.)

У мові шаблону певні символи відведено для спеціальних цілей. Для використання цих символів ставте перед ними \ (зворотну скісну риску), щоб указати, що символи слід сприймати буквально, або скористайтеся одним із попередньо визначених шаблонів, описаних у цьому розділі. У нижченаведеній таблиці перелічені спеціальні символи.

Спеціальний символ Опис
. Крапка
? Знак питання
* Зірочка
+ плюс
( ) Круглі дужки
[ ] Квадратні дужки
{ } Фігурні дужки
^ «Кришка»
$ Знак долара
| Вертикальна риска або лінія
\ Зворотна скісна риска

Наприклад, можна зіставити рядок «Hello?» за допомогою шаблону «Hello\?» зі зворотною скісною рискою перед знаком питання.

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

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

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

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

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

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

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

Регулярні вирази підтримують різні діалекти, і в Power Apps використовується варіант діалекту JavaScript. Загальні відомості про синтаксис див. в статті Синтаксис регулярних виразів. Підтримуються іменовані вкладені збіги (які іноді називають іменованими групами захоплення).

  • Іменовані вкладені збіги: (?<name> ...)
  • Іменовані зворотні посилання: \k<name>

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

Варіанти збігів

Ви можете змінити поведінку цих функцій, вказавши один або кілька параметрів, які ви можете об’єднати за допомогою оператора конкатенації рядків (&).

Перелічення «MatchOptions» Опис Вплив на регулярний вираз
MatchOptions.ПочинаєтьсяЗ Шаблон має збігатися з початку тексту. Додає ^ на початку регулярного виразу.
MatchOptions.Complete Значення за замовчуванням для функції IsMatch. Шаблон має збігатися з усім рядком тексту від початку і до кінця. Додає ^ на початку та $ в кінці регулярного виразу.
MatchOptions.Містить Значення за замовчуванням для функцій Match і MatchAll. Шаблон має з’являтися десь усередині тексту, але не повинен починати або закінчувати його. Не змінює регулярний вираз.
MatchOptions.ЗакінчуєтьсяЗ Шаблон має збігатися з кінцем рядка тексту. Додає $ в кінці регулярного виразу.
MatchOptions.IgnoreCase Обробляє літери у верхньому та нижньому регістрах як ідентичні. За замовчуванням під час зіставлення враховується регістр. Не змінює регулярний вираз. Цей варіант еквівалентний використанню стандартного модифікатора «i» для регулярних виразів.
MatchOptions.Багаторядковий Шукає збіги в декількох рядках. Не змінює регулярний вираз. Цей варіант еквівалентний використанню стандартного модифікатора «m» для регулярних виразів.

Використання функції MatchAll еквівалентно використанню стандартного модифікатора «g» для регулярних виразів.

Синтаксис

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

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

Збіг( Текст, Шаблон [, Параметри ] )

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

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

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

Приклади функції «IsMatch»

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

Уявіть, що програма містить елемент керування Ввід тексту з ім’ям TextInput1 (ВвідТексту1). Користувач уводить значення в цей елемент керування для збереження в базі даних.

Користувач уводить у TextInput1 фразу Hello world (Привіт, світе).

Формула Опис Результат
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 & ")>" Видобуває з контактних відомостей тільки адресу електронної пошти. {
Електронна пошта: «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 ) )
)

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

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

Для перегляду результатів виконання функції MatchAll у галереї зробіть наступне.

  1. До пустого екрана додайте пустий вертикальний елемент керування Галерея.

  2. Для властивості Items галереї укажіть таку формулу: MatchAll( pangram, "\w+" ) або MatchAll( pangram, MultipleLetters ).

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

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

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

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

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

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