Делите путем


Функције "ИсМатцх", "Матцх" и "МатцхАлл"

Важи за: Цанвас апликације Модел-дривен апликације Power Pages Power Platform ЦЛИ

Тестира за подударање или издваја делове текстуалне ниске на основу обрасца.

Опис

Функција IsMatch тестира да ли се текстуална ниска подудара са обрасцем који може садржавати обичне знакове, унапред дефинисане обрасце или регуларни израз. Функције Match и MatchAll враћају подударања, укључујући и подударања мањег степена.

Користите IsMatch да бисте проверили ваљаност онога што је корисник укуцао у контроли Text input. На пример, можете да потврдите да ли је корисник унео важећу адресу е-поште пре него што се резултат сачува у ваш извор података. Ако се ставка не подудара са вашим критеријумима, додајте друге контроле које ће од корисника затражити да исправи ставку.

Користите Match да бисте издвојили прву текстуалну ниску која се подудара са обрасцем и MatchAll да бисте издвојили све текстуалне ниске које се подударају. Можете и да издвојите подударања мањег степена да бисте рашчланили сложене ниске.

Match враћа запис информација о првом пронађеном подударању, а MatchAll враћа табелу записа за свако пронађено подударање. Запис или записи садрже:

Column Тип Опис
named sub‑match or sub‑matches Текст Сваки именовано подударање мањег нивоа ће имати своју колону. Креирајте именовано подударање мањег нивоа помоћу (?<назив>...) у регуларном изразу. Ако именовано подударање мањег нивоа има исти назив као и једна од унапред дефинисаних колона (испод), подударање мањег нивоа има предност, а генерише се упозорење. Да бисте избегли ово упозорење, преименујте подударање мањег нивоа.
FullMatch Текст Цела текстуална ниска која се подударала.
StartMatch Број Почетна позиција подударања у улазној текстуалној ниски. Први знак ниске враћа 1.
SubMatches Табела са једном колоном текста (колона Вредност) Табела именованих и неименованих подударања мањег нивоа у редоследу у којем се појављују у регуларном изразу. Генерално, са именованим подударањима мањег нивоа је лакше радитиа, а они се препоручују. Користите функцију ForAll или функције Last( FirstN( ... ) ) за рад са појединачним подударањем мањег нивоа. Ако у регуларном изразу нису дефинисана подударања мањег нивоа, ова табела ће бити присутна, али празна.

Ове функције подржавају MatchOptions. Подразумевано:

  • Ове функције изводе подударање које разликује велика и мала слова. Користите МатцхОптионс .ИгнореЦасе да бисте извршили подударања без предусећаја предмета.
  • IsMatch се подудара са целом текстуалном ниском (Довршено MatchOption), док Match и MatchAll претражују подударања било где у текстуалној ниски (Садржи MatchOption). Користите Complete, Contains, BeginsWith или EndsWith, како одговара вашем сценарију.

IsMatch враћа тачно ако се текстуални низ подудара са обрасцем или нетачно ако се не подудара. Match враћа blank ако се не нађе подударање које се може тестирати помоћу функције IsBlank. MatchAll враћа празну табелу ако се не нађе подударање које се може тестирати помоћу функције IsEmpty.

Ако користите MatchAll да бисте поделили текстуалну ниску, размислите о коришћењу функције Split која је једноставнија за употребу и бржа.

Обрасци

Кључ за коришћење ових функција је у опису обрасца који треба да се подудара. Описујете образац у текстуалној ниски као комбинацију:

  • Обичних знакова, као што су „abc“ или „123“.
  • Унапред дефинисани обрасци, као што су Писмо, MultipleDigits или Е-порука. (Нумеричка Match дефинише ове обрасце.)
  • Кодови регуларног израза, као што су "\d+\s+\d+" или „[a-z]+“.

Комбинујте ове елементе помоћу оператора за спајање ниски &. На пример, "абц" & Дигит & "\с +" је важећи образац који одговара знаковима"а", "б" и "ц", а затим следи цифра од 0 до 9, а затим најмање један знак у белој боји.

Обични знакови

Најједноставнији образац је низ обичних знакова који се тачно подударају.

На пример, када се користи са функцијом IsMatch, ниска „Здраво“ се тачно подудара са обрасцем „Здраво“. Ни више ни мање. Ниска "здраво!" не одговара обрасцу због узвичника на крају и зато што је величина слова погрешна на слову „з“. (Погледајте MatchOptions за начине измене овог понашања.)

У језику обрасца одређени знакови су резервисани за посебне намене. Да бисте користили ове знакове, ставите префикс \ (лева коса црта) испред знака да бисте назначили да знак треба схватити дословно или користите један од унапред дефинисаних образаца описаних касније у овој теми. У овој табели су наведени посебни знакови:

Посебан знак Опис
. тачка
? знак питања
* звездица
+ plus
( ) заграде
[ ] угласте заграде
{ } витичастe заградe
^ карет
$ симбол за долар
| vертикална трака или канал
\ коса црта уназад

На пример, можете да се подударате са "Здраво?" помоћу обрасца "Здраво\?" са левом косом цртом пре знака питања.

Унапред дефинисани обрасци

Унапред дефинисани обрасци омогућавају једноставан начин за подударање било ког скупа знакова или низа више знакова. Користите оператор за спајање ниски& да бисте комбиновали сопствене текстуалне ниске са члановима прозора Матцх енум:

Нумеричка Match Опис Регуларни израз
Any Одговара било ком знаку. .
Comma Подудара се са зарезом. ,
Digit Подудара се са једном цифром (од „0“ до „9“). \d
Е-порука Одговара адреси е-поште која садржи симбол „ет“ („@“) и назив домена који садржи тачку („.“) .+\@.+\\.[^\\.]{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
Tab Поклапа се са знаком за табулацију. \t

На пример, образац "А" & МултиплеДигитс ће се подударати са словом "А" праћено једном или више цифара.

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

Образац који ове функције користе је а регуларни израз. Обични знакови и унапред дефинисани обрасци који су описани раније у овој теми помажу у изградњи регуларних израза.

Редовни изрази су веома моћни, доступни су у многим програмским језицима, а користе се у најразличитије сврхе. Такође могу често изгледати као случајни низ интерпункцијских знакова. Овај чланак не описује све аспекте регуларних израза, али на интернету је доступно мноштво информација, водича и алатки.

Регуларни изрази долазе у различитим дијалектима, а Power Apps користи варијанту JavaScript дијалекта. Погледајте синтакса регуларног израза за увод у синтаксу. Подржана су подударања мањег нивоа (којА се понекад називају и именоване групе за хватање):

  • Именована подударања мањег нивоа: (?<name> ...)
  • Именоване повратне референце: \k<name>

У нумеричкој табели Match раније у овој теми, свака нумеричка вредност се појављује у истом реду као и одговарајући регуларни израз.

Опције подударања

Понашање ових функција можете изменити тако што ћете навести једну или више опција, које можете комбиновати помоћу оператора за спајање ниски ( & ).

Нумерички MatchOptions Опис Утицај на регуларни израз.
МатцхОптионс.БегинсWитх Образац се мора подударати од почетка текста. Додаје ^ на почетак регуларног израза.
МатцхОптионс.Цомплете Подразумевано за IsMatch. Образац се мора подударати са целом ниском текста, од почетка до краја. Додаје ^ на почетак, а $ на крај регуларног израза.
МатцхОптионс.Цонтаинс Подразумевано за Match и MatchAll. Образац се мора појавити негде у тексту, али не треба га започињати или завршавати. Не мења регуларни израз.
МатцхОптионс.ЕндсWитх Образац се мора подударати са крајем ниске текста. Додаје $ на крај регуларног израза.
МатцхОптионс.ИгнореЦасе Велика и мала слова третира као идентична. Подразумевано је подударање осетљиво на велика и мала слова. Не мења регуларни израз. Ова опција је еквивалент стандардном „i“ модификатору регуларних израза.
МатцхОптионс.Мултилине Подудара се у више линија. Не мења регуларни израз. Ова опција је еквивалент стандардном „m“ модификатору регуларних израза.

Коришћење MatchAll је еквивалентно коришћењу стандардног „g“ модификатора за регуларне изразе.

Синтакса

IsMatch( Text, Pattern [, Options ] )

  • Text – Обавезно. Ниска текста за тестирање.
  • Pattern – Обавезно. Образац за тестирање као текстуална ниска. Повежите унапред дефинисане обрасце који нумеричка вредност Match дефинише, или обезбедите правилан израз. Образац мора да буде константна формула без икаквих променљивих, извора података или других динамичких референци које се мењају током рада апликације.
  • Options – Опционално. Комбинација текстуалне ниске од нумеричких MatchOptions вредности. Подразумевано, MatchOptions.Complete се користи.

Match( Text, Pattern [, Options ] )

  • Text – Обавезно. Ниска текста за подударање.
  • Pattern – Обавезно. Образац за подударање као текстуална ниска. Повежите унапред дефинисане обрасце који нумеричка вредност Match дефинише, или обезбедите правилан израз. Образац мора да буде константна формула без икаквих променљивих, извора података или других динамичких референци које се мењају током рада апликације.
  • Options – Опционално. Комбинација текстуалне ниске од нумеричких MatchOptions вредности. Подразумевано, MatchOptions.Contains се користи.

MatchAll( Text, Pattern [, Options ] )

  • Text – Обавезно. Ниска текста за подударање.
  • Pattern – Обавезно. Образац за подударање као текстуална ниска. Повежите унапред дефинисане обрасце који нумеричка вредност Match дефинише, или обезбедите правилан израз. Образац мора да буде константна формула без икаквих променљивих, извора података или других динамичких референци које се мењају током рада апликације.
  • 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. 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 за панграм.
MatchAll( pangram, "the", IgnoreCase ) Пронађите сва подударања од „the“ у текстуалној ниски коју садржи променљива pangram. У овом случају, тест није осетљив на велика и мала слова, тако да су обе инстанце речи пронађене. Колона SubMatches је празна јер нису дефинисана подударања мањег нивоа. 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" ) Подудара се са свим знацима између „лисице“ и „пса“. {
between: "скаче преко успаваног",
FullMatch: "лисица скаче преко успаваног пса",
SubMatches: [ "jumps over the lazy" ],
StartMatch: 17
}

Да бисте видели резултате MatchAll у галерији:

  1. На празном екрану уметните празну вертикалну контролу Галерија.

  2. Подесите својство Items галерије као MatchAll( pangram, "\w+" ) или MatchAll( pangram, MultipleLetters ).

    Галерија ставки.

  3. Изаберите „Додајте ставку са картице Уметање“ на средини контроле галерије за одабир предлошка галерије:

  4. Додајте контролу Ознака у предложак галерије.

  5. Подесите својство Текст ознаке на ThisItem.FullMatch.

    Галерија је испуњена сваком речју у нашем примеру текста. Промените величину предлошка галерије и контроле налепнице како бисте видели све речи на једном екрану.

    Својство Text.