Funkcie IsMatch, Match a MatchAll

Vzťahuje sa na: Aplikácie plátna Modelom riadené aplikácie Power Platform CLI

Testuje zhodu alebo extrahuje časti textového reťazca na základe vzoru.

Popis

Funkcia IsMatch testuje, či sa textový reťazec zhoduje so vzorom, ktorý sa môže skladať z obyčajných znakov, preddefinovaného vzoru alebo regulárneho výrazu. Funkcie Match a MatchAll vrátia to, čo sa zhoduje, vrátane čiastkových zhôd.

Pomocou funkcie IsMatch môžete overiť, či používateľ zadal správny text do ovládacieho prvku Vstup textu. Môžete napríklad overiť, či používateľ zadal platnú e-mailovú adresu predtým, než sa výsledok uloží do vášho zdroja údajov. Ak zadaný text nespĺňa vaše kritériá, pridajte ďalšie ovládacie prvky, ktorý používateľa vyzvú, aby zadaný text opravil.

Použitie funkciu Match na extrahovanie prvého textového reťazca, ktorý zodpovedá vzoru a MatchAll na extrahovanie všetkých textových reťazcov, ktoré sa zhodujú. Môžete tiež extrahovať čiastkové zhody na analýzu zložitých reťazcov.

Funkcia Match vráti záznam informácií pre prvú nájdenú zhodu a MatchAll vráti tabuľku záznamov pre každú nájdenú zhodu. Záznam alebo záznamy obsahujú:

Column Type Description
pomenovanú čiastkovú zhodu alebo čiastkové zhody SMS správa Každá pomenovaná čiastková zhoda bude mať svoj vlastný stĺpec. Vytvorte pomenovanú čiastkovú zhodu pomocou (?<name>...) v regulárnom výraze. Ak má pomenovaná čiastková zhoda rovnaký názov ako jeden z preddefinovaných stĺpcov (nižšie), má prednosť čiastková zhoda a vygeneruje sa varovanie. Ak sa chcete tomuto varovaniu vyhnúť, premenujte čiastkovú zhodu.
FullMatch Text Celý textový reťazec, ktorý sa zhodoval.
StartMatch Číslo Počiatočná pozícia zhody v rámci vstupného textového reťazca. Prvý znak reťazca vráti 1.
SubMatches Textová tabuľka s jedným stĺpcom (stĺpec Hodnota) Tabuľka pomenovaných a nemenovaných čiastkových zhôd v poradí, v akom sa vyskytujú v regulárnom výraze. Vo všeobecnosti sa pomenované čiastkové zhody ľahšie používajú a odporúčame vám ich používať. Použite funkciu ForAll alebo funkcie LastFirstN... ) ) na prácu s jednotlivými čiastkovými zhodami. Ak v regulárnom výraze nie sú definované žiadne čiastkové zhody, táto tabuľka bude prítomná, ale prázdna.

Tieto funkcie podporujú MatchOptions. Štandardne:

  • Tieto funkcie vykonávajú porovnávanie malých a veľkých písmen. Pomocou funkcie MatchOptions.IgnoreCase vykonajte zhody nerozlišujúce veľké a malé písmená.
  • IsMatch porovnáva celý textový reťazec (MatchOption – Complete), zatiaľ čo Match a MatchAll hľadá zhodu kdekoľvek v textovom reťazci (MatchOption – Contains). Použite nastavenia Complete, Contains, BeginsWith alebo EndsWith podľa svojich potrieb.

Ak sa textový reťazec so vzorom zhoduje, funkcia IsMatch vráti hodnotu pravda, v opačnom prípade vráti hodnotu nepravda. Funkcia Match vráti blank, ak sa nenájde žiadna zhoda, ktorá sa dá testovať pomocou funkcie IsBlank. Funkcia MatchAll vráti prázdnu tabuľku, ak sa nenájde žiadna zhoda, ktorá sa dá testovať pomocou funkcie IsEmpty.

Ak používate funkciu MatchAll na rozdelenie textového reťazca, zvážte použitie funkcie Split, ktorá je jednoduchšia a rýchlejšia.

Vzory

Základom používania týchto funkcií je popísanie vzoru, s ktorým sa má reťazec zhodovať. Vzor v textovom reťazci sa popisuje ako kombinácia:

  • obyčajných znakov, napríklad „abc“ alebo „123“,
  • preddefinovaných vzorov, napríklad Letter (písmeno), MultipleDigits (viacero číslic) alebo Email, (tieto vzory sú definované v zozname zhôd),
  • regulárnych výrazov, napríklad „\d+\s+\d+“ alebo „[a-z]+“.

Skombinujte tieto prvky pomocou operátora zreťazenia reťazcov&. Napríklad "abc" & Digit & "\s+"je platný vzor, ktorý zodpovedá znakom "a", "b" a " c", za ktorými nasleduje číslica od 0 do 9, za ktorou nasleduje aspoň jeden znak medzery.

Bežné znaky

Najjednoduchším vzorom je postupnosť bežných znakov, ktoré sa majú presne zhodovať.

Napríklad pri použití s IsMatch, reťazec „Ahoj“ zodpovedá presne vzoru „Ahoj“. O nič viac a o nič menej. Reťazec „ahoj!“ sa nezhoduje so vzorom z dôvodu výkričníka na konci a písmeno „a“ na začiatku je na rozdiel od vzoru malé. (Spôsoby, ako toto správanie upraviť, nájdete v časti Možnosti zhody.)

V jazyku vzoru sú niektoré znaky vyhradené pre zvláštne účely. Ak chcete použiť tieto znaky, buď pred znak napíšte \ (opačná lomka) na znamenie, že sa má znak brať doslova, prípadne použite niektorý z preddefinovaných vzorov opisovaných v tejto téme ďalej. Špeciálne znaky sú uvedené v tejto tabuľke:

Špeciálny znak Description
. bodka alebo čiarka
? otáznik
* hviezdička
+ Plus
( ) zátvorky
[ ] hranaté zátvorky
{ } zložené zátvorky
^ strieška
$ znak dolára
| zvislá čiara alebo rúra
\ spätná lomka

Môžete napríklad nájsť zhodu „Ahoj?“ pomocou vzoru „Ahoj\?“ s opačnou lomkou pred otáznikom.

Preddefinované vzory

Preddefinované vzory poskytujú jednoduchý spôsob, ako nájsť zhodu buď s jedným zo skupiny znakov alebo s postupnosťou viacerých znakov. Použite operátor zreťazenia reťazcov na skombinovanie vlastných textových reťazcov s členmi enum zhody:

Zoznam zhôd Popis Regulárny výraz
Any Skontroluje zhodu s ľubovoľným znakom. .
Comma Skontroluje zhodu s čiarkou. ,
Digit Skontroluje zhodu s jednou číslicou (0 až 9). \d
Email Skontroluje zhodu s e-mailovou adresou, ktorá obsahuje symbol „zavináča“ („@“) a názov domény obsahujúci bodku („.“) .+\@.+\\.[^\\.]{2,}
Hyphen Skontroluje zhodu so spojovníkom. \-
LeftParen Skontroluje zhodu s ľavou zátvorkou „(“. \(
Letter Skontroluje zhodu s písmenom. \p{L}
MultipleDigits Skontroluje zhodu s viacerými číslicami. \d+
MultipleLetters Skontroluje zhodu s viacerými písmenami. \p{L}+
MultipleNonSpaces Skontroluje zhodu s jedným alebo viacerými znakmi, ktoré nepridávajú prázdny znak (nemedzera, tabulátor, nový riadok). \S+
MultipleSpaces Skontroluje zhodu s jedným alebo viacerými znakmi, ktoré pridávajú prázdny znak (medzera, tabulátor alebo nový riadok). \s+
NonSpace Skontroluje zhodu s jedným znakom, ktorý nepridáva prázdny znak. \S
OptionalDigits Skontroluje zhodu so žiadnou, jednou alebo viacerými číslicami. \d*
OptionalLetters Skontroluje zhodu so žiadnym, jedným alebo viacerými písmenami. \p{L}*
OptionalNonSpaces Skontroluje zhodu s žiadnym, jedným alebo viacerými znakmi, ktoré nepridávajú prázdny znak. \S*
OptionalSpaces Skontroluje zhodu so žiadnym, jedným alebo viacerými znakmi, ktoré pridávajú prázdny znak. \s*
Period Skontroluje zhodu s bodkou (.). \.
RightParen Skontroluje zhodu s pravou zátvorkou „)“. \)
Space Skontroluje zhodu so znakom, ktorý pridáva prázdny znak. \s
Tab Skontroluje zhodu so znakom tabulátora. \t

Napríklad vzor "A" a MultipleDigits sa budú zhodovať s písmenom "A", za ktorým nasleduje jedna alebo viac číslic.

Regulárne výrazy

Vzor, ktorý tieto funkcie používajú, je regulárny výraz. Na vytváranie regulárnych výrazov pomáhajú obyčajné znaky a preddefinované vzory, ktoré sú popísané vyššie v tejto téme.

Regulárne výrazy sú veľmi účinné, dostupné v rôznych programovacích jazykoch a používajú sa na najrôznejšie účely. Často tiež môžu vyzerať ako náhodná sekvencia interpunkčných znamienok. Tento článok neopisuje všetky aspekty regulárnych výrazov, ale môže vám pomôcť veľké množstvo informácii, návodov a nástrojov, ktoré nájdete na internete.

Regulárne výrazy majú rôzne dialekty a služba Power Apps používa variant dialektu JavaScript. Pozrite si syntax regulárneho výrazu pre úvod do syntaxe. Podporované sú pomenované čiastkové zhody (niekedy nazývané aj skupiny zachytávania):

  • Pomenované čiastkové zhody: (?<názov> ...)
  • Pomenované spätné referencie: \k<názov>

V tabuľke zoznamu Zhoda uvedenej vyššie v tejto téme, sa každý zoznam sa objaví v rovnakom riadku ako jeho zodpovedajúci regulárny výraz.

Možnosti zhody

Správanie týchto funkcií môžete upraviť zadaním jednej alebo viacerých možností, ktoré môžete kombinovať pomocou operátora zreťazenia reťazcov (&).

Zoznam možností zhody Description Vplyv na regulárny výraz
MatchOptions.BeginsWith Vzor sa musí zhodovať od začiatku textu. Pridá ^ na začiatok regulárneho výrazu.
MatchOptions.Complete Predvolené nastavenie pre IsMatch. Vzor sa musí zhodovať s celým reťazcom textu od začiatku do konca. Pridá ^ na začiatok a $ na koniec regulárneho výrazu.
MatchOptions.Contains Predvolené pre Match a MatchAll. Vzor sa musí nachádzať niekde v texte, ale nemusí byť na začiatku ani na konci. Nezmení regulárny výraz.
MatchOptions.EndsWith Vzor sa musí zhodovať s koncom reťazca textu. Pridá $ na koniec regulárneho výrazu.
MatchOptions.IgnoreCase Zaobchádza s veľkými a malými písmenami rovnako. V predvolenom nastavení sa veľkosť písmen rozlišuje. Nezmení regulárny výraz. Táto možnosť je ekvivalentom štandardného modifikátora „i“ pre regulárne výrazy.
MatchOptions.Multiline Kontroluje zhodu na viacerých riadkoch. Nezmení regulárny výraz. Táto možnosť je ekvivalentom štandardného modifikátora „m“ pre regulárne výrazy.

Použitie MatchAll je ekvivalentné s použitím štandardného modifikátora „g“ pre regulárne výrazy.

Syntax

IsMatchText, Pattern [, Options ] )

  • Text – povinné. Textový reťazec, ktorý sa má otestovať.
  • Pattern – povinné. Vzor na otestovanie, napríklad textový reťazec. Zreťazte preddefinované vzory, ktoré definuje zoznam zhôd, alebo zadajte regulárny výraz. Pattern musí byť konštantným vzorcom bez akýchkoľvek premenných, zdrojov údajov alebo iných dynamických odkazov, ktoré sa menia pri spustení aplikácie.
  • Options – voliteľné. Textový reťazec s kombináciou hodnôt zo zoznamu MatchOptions. V predvolenom nastavení sa používa MatchOptions.Complete.

MatchText, Pattern [, Options ] )

  • Text – povinné. Textový reťazec, ktorý sa má zhodovať.
  • Pattern – povinné. Vzor na otestovanie zhody, napríklad textový reťazec. Zreťazte preddefinované vzory, ktoré definuje zoznam zhôd, alebo zadajte regulárny výraz. Pattern musí byť konštantným vzorcom bez akýchkoľvek premenných, zdrojov údajov alebo iných dynamických odkazov, ktoré sa menia pri spustení aplikácie.
  • Options – voliteľné. Textový reťazec s kombináciou hodnôt zo zoznamu MatchOptions. V predvolenom nastavení sa používa MatchOptions.Contains.

MatchAllText, Pattern [, Options ] )

  • Text – povinné. Textový reťazec, ktorý sa má zhodovať.
  • Pattern – povinné. Vzor na otestovanie zhody, napríklad textový reťazec. Zreťazte preddefinované vzory, ktoré definuje zoznam zhôd, alebo zadajte regulárny výraz. Pattern musí byť konštantným vzorcom bez akýchkoľvek premenných, zdrojov údajov alebo iných dynamických odkazov, ktoré sa menia pri spustení aplikácie.
  • Options – voliteľné. Textový reťazec s kombináciou hodnôt zo zoznamu MatchOptions. V predvolenom nastavení sa používa MatchOptions.Contains.

Príklady IsMatch

Bežné znaky

Predstavte si, že vaša aplikácia obsahuje ovládací prvok Vstup textu s názvom VstupTextu1. Používateľ zadá do tohto ovládacieho prvku hodnoty, ktoré sa majú uložiť do databázy.

Používateľ do prvku VstupTextu1 napíše Hello world.

Vzorec Popis Výsledok
IsMatch( TextInput1.Text, "Hello world" ) Skontroluje, či sa zadanie používateľa presne zhoduje s textom „Hello world“. pravda
IsMatch( TextInput1.Text, "Good bye" ) Skontroluje, či sa zadanie používateľa presne zhoduje s textom „Good bye“. nepravda
IsMatch( TextInput1.Text, "hello", Contains ) Skontroluje, či zadanie používateľa obsahuje slovo „hello“ (s rozlíšením veľkosti písmen). nepravda
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Skontroluje, či zadanie používateľa obsahuje slovo „hello“ (bez rozlíšenia veľkosti písmen). pravda

Preddefinované vzory

Vzorec Popis Výsledok
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) Zodpovedá číslu sociálneho poistenia v USA pravda
IsMatch( "joan@contoso.com", Email ) Zodpovedá e-mailovej adrese pravda
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) Zodpovedá postupnosti číslic nasledovanej bodkou a potom žiadnou alebo viacerými číslicami. pravda
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) Zodpovedá postupnosti číslic nasledovanej bodkou a potom žiadnou alebo viacerými číslicami. Bodka sa v texte na určenie zhody nenachádza, preto sa tento vzor nezhoduje. nepravda

Regulárne výrazy

Vzorec Popis Výsledok
IsMatch( "986", "\d+" ) Zodpovedá celému číslu väčšiemu než nula. pravda
IsMatch( "1.02", "\d+(\.\d\d)?" ) Zodpovedá kladnej peňažnej čiastke. Ak zadanie obsahuje desatinnú bodku, musí obsahovať tiež 2 číselné znaky za desatinnou bodkou. Napríklad 3.00 je platné, ale 3.1 nie je. pravda
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) Zodpovedá kladnej alebo zápornej peňažnej čiastke. Ak zadanie obsahuje desatinnú bodku, musí obsahovať tiež 2 číselné znaky za desatinnou bodkou. pravda
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) Zodpovedá číslu sociálneho poistenia v USA. Overí formát, typ a dĺžku zadaného poľa. Reťazec, ktorý sa má zhodovať, musí obsahovať tri číselné znaky, po ktorých nasleduje spojovník a potom dva číselné znaky, po ktorých nasleduje spojovník a ďalšie štyri číselné znaky. pravda
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) Rovnaké ako predchádzajúci príklad, ale jeden zo spojovníkov nie je v zadaní na správnom mieste. nepravda
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) Overí silné heslo, ktoré musí obsahovať osem, deväť alebo 10 znakov a okrem toho aspoň jednu číslicu a aspoň jeden znak abecedy. Reťazec nesmie obsahovať špeciálne znaky. nepravda

Príklady pre funkcie Match a MatchAll

Vzorec Popis Výsledok
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" Extrahuje iba e-mailovú časť kontaktných informácií. {
email: „bob.jones@contoso.com“,
FullMatch: „<bob.jones@contoso.com>“,
SubMatches: [ „bob.jones@contoso.com“ ],
StartMatch: 11
}
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" Extrahuje iba e-mailovú časť kontaktných informácií. Nenašla sa žiadna platná adresa (neexistuje znak @), takže funkcia vráti blank hodnotu. blank
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) Extrahuje časti jazyk, skript a oblasť značky jazyka, ktoré vracia funkcia Language. Tieto výsledky odrážajú USA; pozri dokumentáciu k funkcii Language pre viac príkladov. Operátor (?: zoskupuje znaky bez vytvorenia ďalšej čiastočnej zhody. {
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)?" ) Extrahuje hodiny, minúty a sekundy z hodnoty trvania ISO 8601. Extrahované čísla sú stále v textovom reťazci; použite funkciu Value, ktorá ho prevedie na číslo predtým, ako sa na ňom vykonajú matematické operácie. {
hours: "2",
minutes: "1",
seconds: "39",
FullMatch: "PT2H1M39S",
SubMatches:["2","1","39"],
StartMatch: 1
}

Poďme sa podrobne pozrieť na posledný príklad. Ak chcete tento reťazec previesť na hodnotu dátumu a času pomocou funkcie Time, musíte pomenované čiastočné zhody odovzdať jednotlivo. Na tento účel môžete použiť funkciu With, ktorá pracuje so záznamom, ktorý vracia funkcia Match:

With(
    Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
   Time( Value( hours ), Value( minutes ), Value( seconds ) )
)

Pre tieto príklady pridajte ovládací prvok Tlačidlo, nastavte jeho vlastnosť OnSelect podľa tohto vzorca a potom vyberte tlačidlo:

Set( pangram, "The quick brown fox jumps over the lazy dog." )
Vzorec Popis Výsledok
Match( pangram, "THE", IgnoreCase ) Nájsť všetky zhody „THE“ v textovom reťazci, ktorý obsahuje premenná pangram. Reťazec obsahuje dve zhody, ale vracia sa iba prvá, pretože používate funkciu Match a nie MatchAll. Stĺpec SubMatches je prázdny, pretože neboli definované žiadne čiastkové zhody. {
FullMatch: "The",
SubMatches: [ ],
StartMatch: 32
}
MatchAll( pangram, "the" ) Nájsť všetky zhody „the“ v textovom reťazci, ktorý obsahuje premenná pangram. Pri teste sa rozlišujú malé a veľké písmená, takže sa nájde iba druhý prípad „the“. Stĺpec SubMatches je prázdny, pretože neboli definované žiadne čiastkové zhody. MatchAll pre pangram.
MatchAll( pangram, "the", IgnoreCase ) Nájsť všetky zhody „the“ v textovom reťazci, ktorý obsahuje premenná pangram. V tomto prípade sa pri teste nerozlišujú malé a veľké písmená, takže sa nájdu obidva výskyty slova. Stĺpec SubMatches je prázdny, pretože neboli definované žiadne čiastkové zhody. MatchAll s IgnoreCase.
MatchAll( pangram, "\b\wo\w\b" ) Nájde všetky trojpísmenové slová s písmenom „o“ v strede. Všimnite si, že výraz „brown“ je vylúčený, pretože nejde o trojpísmenné slovo, a preto nezodpovedá znaku „\ b“ (hranice slova). MatchAll pre pangram s b, wo, w a b.
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) Zhodou budú všetky znaky medzi slovami „fox“ a „dog. {
between: "jumps over the lazy",
FullMatch: "fox jumps over the lazy dog",
SubMatches: [ "jumps over the lazy" ],
StartMatch: 17
}

Ak chcete vidieť výsledky funkcie MatchAll v galérii:

  1. Na prázdnu obrazovku vložte prázdny vertikálny ovládací prvok Galéria.

  2. Nastavte vlastnosť Items galérie na MatchAll( pangram, "\w+" ) alebo MatchAll( pangram, MultipleLetters ).

    Galéria položiek.

  3. Vyberte „Pridať položku z karty Vložiť“ v strede ovládacieho prvku galérie a vyberte šablónu galérie.

  4. Do šablóny galérie pridajte ovládací prvok Označenie.

  5. Nastavte vlastnosť Text označenia na ThisItem.FullMatch:

    Galéria je vyplnená každým slovom v našom príklade textu. Zmeňte veľkosť šablóny galérie a ovládacieho prvku označenia, aby ste na jednej obrazovke videli všetky slová.

    Vlastnosť textu.