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


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

Отнася се за: Canvas apps Model-driven apps Power Pages Power Platform CLI

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

Описание

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

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

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

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

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

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

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

IsMatch завръща вярно, ако текстовият низ съответства на модела или невярно, ако не. Match завръща празно, ако не се намери съвпадение, което може да бъде тествано с 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 Описание Регулярен израз
Any Съответства на всеки символ. .
Comma Съответства със запетая. ,
Digit Съответства на една цифра ("0" до "9"). \d
Email Съответства на имейл адрес, който съдържа символ „при“ ("@") и име на домейн, което съдържа точка (".") .+\@.+\\.[^\\.]{2,}
Hyphen Съответства на тире. \-
LeftParen Съответства на лява скоба "(". \(
Letter Съответства на писмо. \p{L}
MultipleDigits Съответства на една или повече цифри. \d+
MultipleLetters Съответства на една или повече букви. \p{L}+
MultipleNonSpaces Съответства на един или повече знака, които не добавят бяло пространство (не интервал, раздел или нов ред). \S+
MultipleSpaces Съответства на един или повече знака, които добавят бяло пространство (интервал, раздел или нов ред). \s+
NonSpace Съответства на един символ, който не добавя бяло пространство. \S
OptionalDigits Съответства на нула, едно или повече цифри. \d*
OptionalLetters Съответства на нула, една или повече букви. \p{L}*
OptionalNonSpaces Съответства на нула, един или повече знаци, които не добавят бяло пространство. \S*
OptionalSpaces Съответства на нула, един или повече знаци, които добавят бяло пространство. \s*
Period Съответства на точка ("."). \.
RightParen Съответства на дясна скоба ")". \)
Space Съответства на знак, който добавя бяло пространство. \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( Text, Pattern [, Options ] )

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

Match( Text, Pattern [, Options ] )

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

MatchAll( Text, Pattern [, Options ] )

  • Text – Задължително. Текстовият низ за съответствие.
  • Pattern – Задължително. Моделът за съответствие като текстов низ. Свържете предварително дефинираните модели, които номерирането Match дефинира или предоставя редовен израз. Pattern трябва да бъде постоянна формула без променливи, източници на данни или други динамични референции, които се променят, докато приложението работи.
  • Options – Опционално. Комбинация от текстови низове на стойности на изброяване на 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.

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

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