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

Отнася се за: Приложения за платно Copilot Studio Моделиращи приложения Power Platform CLI Dataverse функции Power Pages

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

Описание

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

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

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

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

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

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

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

IsMatch връща "истина ", ако текстовият низ съответства на шаблона или 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!" не съответства на шаблона поради удивителния знак в края и защото случаят е грешен за буквата "h". (Вижте Match опциите за начини за промяна на това поведение.)

В езика на шарката знаците . ? * + ( ) [ ] ^ $ | \ са запазени за специални цели. За да използвате тези знаци, префиксирайте знака с (обратно наклонена \ черта), за да укажете, че знакът трябва да бъде взет буквално, или използвайте един от предварително дефинираните модели. Можете например да съпоставите низа "Hello?" , като използвате шаблона "Hello\\?" с обратно наклонена черта преди въпросителния знак.

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

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

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

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

Power Apps използва различна дефиниция за Match. EMail и 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. Тирето е различно. Сурогатните двойки на Unicode не се третират като един знак. MatchOptions.NumberedSubMatches е по подразбиране. Версията на регулярните изрази, описани тук, скоро ще бъде налична в Power Apps под превключвател "Съвместимост на Power Fx V1.0".

Ето някои основни елементи на регулярни изрази, които изграждат сложност при анализа на число.

Функция Пример Описание
Предварително зададен клас знаци \d Този регулярен израз съответства на едно число, например 1. Класът знаци съответства на набор от знаци и \d съответства на стандартните цифри 09 , както и на цифрите, дефинирани в Unicode знаковата категория "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 и MatchAllизвън IsMatch Power Apps. Моделът трябва да се появи някъде в текста, но не е необходимо да се започва или завършва. Не променя регулярния израз.
MatchOptions.DotAll Променя поведението на оператора . (точката), така че да съответства на всички знаци, включително новите знаци. Не е налично в Power Apps. Не променя регулярния израз. Тази опция е еквивалентна на стандартния модификатор "s" за регулярни изрази.
MatchOptions.EndsWith Моделът трябва да съвпада с края на низа от текст. Добавя $ към края на регулярния израз.
MatchOptions.FreeSpacing Интервалите, включително новите линии, се игнорират в регулярния израз. Коментарите в края на реда, започващи с, се # игнорират. Не е налично в Power Apps. Променя само синтаксиса на регулярния израз. Тази опция е еквивалентна на стандартния модификатор "x" за регулярни изрази.
MatchOptions.IgnoreCase Третира главни и малки букви като еднакви. По подразбиране съвпадението е чувствително към регистър. Не променя регулярния израз. Тази опция е еквивалентна на стандартния "i" модификатор за регулярни изрази.
MatchOptions.Multiline Променя поведението и ^$ съпоставяне в края на линията. Не променя регулярния израз. Тази опция е еквивалентна на стандартния "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 world в 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", 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 за повече примери. Операторът (?: групира символи, без да създава друг под-съвпадение. {
език: "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" в текстовия низ, който съдържа променливата 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" ) Намира всички трибуквени думи с "о" в средата. "кафява" е изключена, защото не е трибуквена дума и следователно не съответства на "\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: "лисица скача над мързеливото куче",
StartMatch: 17
}

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

  1. В празен екран вмъкнете празна вертикална контрола на галерия .

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

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

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

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

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

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

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