Споделяне чрез


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

Отнася се за: Приложения за платно Управлявани от модел Power Pages Power Platform приложения CLI

Тестове за съвпадение или извлича части от текстов низ на базата на шаблон.

Описание

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

Използвайте IsMatch, за да потвърдите какво е въвел потребител във Въвеждане на текст контрола. Например, можете да потвърдите дали потребителят е въвел валиден имейл адрес, преди резултатът да бъде запазен във вашия източник на данни. Ако записът не отговаря на критериите ви, добавете други контроли, които подканят потребителя да коригира записа.

Използвайте Match за извличане на първия текстов низ, който съответства на шаблон и MatchAll за извличане на всички текстови низове, които съвпадат. Можете също да извлечете под-съвпадения, за да анализирате сложни низове.

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

Column Тип Описание
именувано подсъвпадение или подсъвпадение Текстово съобщение Всеки наречен под-мач ще има своя колона. Създайте именувано под-съвпадение, като използвате (?<name>...) в правилния израз. Ако име на под-съвпадение има същото име като една от предварително зададените колони (по-долу), под-съответствието има предимство и се генерира предупреждение. За да избегнете това предупреждение, преименувайте под-съответствието.
Пълен мач Текст Целият текстов низ, който беше съчетан.
СтартМач Номер Начална позиция на съвпадението във въвеждащия текстов низ. Първият символ на низа връща 1.
Подмачове Таблица с една колона на текст (колона стойност) Таблицата с имена и неназовани под-съвпадения в реда, в който те се появяват в регулярния израз. Като цяло, именатите под-мачове са по-лесни за работа и се насърчават. Използвайте ForAll функция или функциите Last( FirstN( ... ) ) за работа с индивидуални под-съвпадения. Ако в редовния израз не са определени под-съвпадения, тази таблица ще присъства, но празна.

Тези функции поддържат MatchOptions. По подразбиране:

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

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

Ако използвате MatchAll, за да разделите текстов низ, помислете дали да използвате Split функция, която е по-проста за използване и по-бърза.

Модели

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

  • Обикновени знаци, като например "abc" или "123".
  • Предварително определени модели, като например Letter, MultipleDigits или Email. (Изброяването Match дефинира тези модели.)
  • Кодове с регулярни изрази, като например "\d+\s+\d+" или "[a-z]+".

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

Обикновени знаци

Най-простият модел е последователност от обикновени знаци, които трябва да бъдат точно съвпадащи.

Например, когато се използва с IsMatch функция, низът "Hello" съответства на модела "Hello" точно. Не повече и не по-малко. Низът "hello!" не съвпада с шаблона поради възклицателната точка в края и защото случаят е грешен за буквата "h". (Вижте MatchOptions за начини за промяна на това поведение.)

В езика на шаблона определени символи са запазени за специални цели. За да използвате тези знаци, или представете символа с \ (наклонена черта), за да се посочи, че героят трябва да се приема буквално или да се използва един от предварително дефинираните модели, описани по-долу в тази тема. Тази таблица изброява специалните знаци:

Специален знак Описание
. точка
? въпросителен знак
* звездичка
+ plus
( ) скоби
[ ] квадратни скоби
{ } къдрави скоби
^ коректорски знак
$ знак за долар
| вертикална линия или тръба
\ наклонена черта

Например можете да съпоставите „Hello?“ като използвате модела "Hello\?" с обратна наклонена черта преди въпросителния знак.

Предварително определени модели

Предварително зададените модели предоставят прост начин да се съпостави или един от набор от знаци или последователност от няколко знака. Използвайте оператора за конкатенация на низове, за да комбинирате свои собствени текстови низове с членове на Matchизброяване :

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

Например, моделът "A" & MultipleDigits ще съвпадне с буквата "A", последвана от една или повече цифри.

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

Моделът, който тези функции използват е редовен израз. Обикновените символи и предварително дефинираните модели, описани по-горе в тази тема, помагат за изграждането на регулярни изрази.

Редовните изрази са много мощни, предлагат се в много езици за програмиране и се използват за най-различни цели. Те често могат да изглеждат като произволна последователност от препинателни знаци. Тази статия не описва всички аспекти на регулярните изрази, но в интернет се предлага богата информация, уроци и инструменти.

Редовните изрази се предлагат в различни диалекти и Power Apps използва вариант на диалект на JavaScript. Вижте синтаксис с редовен израз за въведение в синтаксиса. Поддържат се именувани под-съвпадения (понякога наричани именувани групи за улавяне):

  • Наименовани под-съвпадения: (?<name> ...)
  • Наименовани обратни препратки: \k<name>

В таблицата за номериране Match таблица по-рано в тази тема, всеки enum се появява в същия ред, тъй като съответства на правилния израз.

Опции за съвпадение

Можете да промените поведението на тези функции, като посочите една или повече опции, които можете да комбинирате с помощта на оператора string- concatenation (&).

Изброяване MatchOptions Описание Влияние върху регулярен израз
MatchOptions.BeginsWith Моделът трябва да съвпада от началото на текста. Добавя ^ до началото на регулярния израз.
MatchOptions.Complete По подразбиране за IsMatch. Моделът трябва да съвпада с целия низ от текста - от началото до края. Добавя ^ към началото и $ към края на регулярния израз.
MatchOptions.Съдържа По подразбиране за Match и MatchAll. Моделът трябва да се появи някъде в текста, но не е необходимо да се започва или завършва. Не променя регулярния израз.
MatchOptions.EndsWith Моделът трябва да съвпада с края на низа от текст. Добавя $ към края на регулярния израз.
MatchOptions.IgnoreCase Третира главни и малки букви като еднакви. По подразбиране съвпадението е чувствително към регистър. Не променя регулярния израз. Тази опция е еквивалентна на стандартния "i" модификатор за регулярни изрази.
MatchOptions.Multiline Съответства в няколко реда. Не променя регулярния израз. Тази опция е еквивалентна на стандартния "m" модификатор за регулярни изрази.

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

Синтаксис

IsMatch(Текст,Шаблон [, Опции ] )

  • Текст – Задължително. Текстовият низ за тестване.
  • Модел – Задължителен. Моделът за тестване като текстов низ. Свържете предварително дефинираните модели, които номерирането Match дефинира или предоставя редовен израз. Шаблонът трябва да е постоянна формула без променливи, източници на данни или други динамични препратки, които се променят по време на изпълнението на приложението.
  • Опции – По избор. Комбинация от текстови низове на стойности на изброяване на MatchOptions. По подразбиране се използва MatchOptions.Complete.

Съвпадение(Текст,Шаблон [, Опции ] )

  • Текст – Задължително. Текстовият низ за съответствие.
  • Модел – Задължителен. Моделът за съответствие като текстов низ. Свържете предварително дефинираните модели, които номерирането Match дефинира или предоставя редовен израз. Шаблонът трябва да е постоянна формула без променливи, източници на данни или други динамични препратки, които се променят по време на изпълнението на приложението.
  • Опции – По избор. Комбинация от текстови низове на стойности на изброяване на MatchOptions. По подразбиране се използва MatchOptions.Contains.

MatchAll(Текст,Шаблон [, Опции ] )

  • Текст – Задължително. Текстовият низ за съответствие.
  • Модел – Задължителен. Моделът за съответствие като текстов низ. Свържете предварително дефинираните модели, които номерирането Match дефинира или предоставя редовен израз. Шаблонът трябва да е постоянна формула без променливи, източници на данни или други динамични препратки, които се променят по време на изпълнението на приложението.
  • Опции – По избор. Комбинация от текстови низове на стойности на изброяване на MatchOptions. По подразбиране се използва MatchOptions.Contains.

Примери за IsMatch

Обикновени знаци

Представете си, че приложението ви съдържа контрола Въвеждане на текст с име TextInput1. Потребителят въвежда стойности в този контрол, за да се съхранява в база данни.

Потребителските типове Здравей свят в TextInput1.

Формула Описание Резултат
IsMatch( TextInput1.Text, "Hello world" ) Тества дали входът на потребителя съвпада точно с низа "Здравей свят". верен
IsMatch( TextInput1.Text, "Good bye" ) Тества дали входът на потребителя съвпада точно с низа "Довиждане". невярно
IsMatch( TextInput1.Text, "hello", Contains ) Тества дали входът на потребителя съдържа думата „здравей“ (чувствителна към малки и малки букви). невярно
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Тества дали входът на потребителя съдържа думата „здравей“ (нечувствителна към малки и малки букви). верен

Предварително определени модели

Формула Описание Резултат
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 ) )
)

За тези примери добавете контрола бутон, задайте свойството 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" ) Намира всички трибуквени думи с "о" в средата. Обърнете внимание, че „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". {
между: "jumps over the lazy",
FullMatch: "fox jumps over the lazy dog",
SubMatches: [ "jumps over the lazy" ],
StartMatch: 17
}

За да видите резултатите от MatchAll в галерия:

  1. В празен екран поставете празна вертикала контрола Галерия.

  2. Задаване свойството на галерията Елементи на MatchAll( pangram, "\w+" ) или MatchAll( pangram, MultipleLetters ).

    Галерия с елементи.

  3. Изберете „Добавете елемент от раздела „Вмъкване”” в средата на контролата за галерия, за да изберете шаблона на галерията.

  4. Добавете контрола етикет към шаблона на галерията.

  5. Задайте свойството Текст на етикета на ThisItem.FullMatch.

    Галерията е изпълнена с всяка дума от нашия пример. Преоразмерете шаблона на галерията и контрола на етикета, за да видите всички думи на един екран.

    Свойство на текст.