Funkce IsMatch, Match a MatchAll
Platí pro: Aplikace plátna Modelem řízené aplikace Power Pages Power Platform CLI
Testuje shodu nebo extrahuje části textového řetězce na základě vzoru.
Popis
Funkce IsMatch testuje, jestli se textový řetězec shoduje se vzorem, který se může skládat z obyčejných znaků, předdefinovaných vzorů nebo regulárního výrazu. Funkce Match a MatchAll vrátí shody včetně dílčích shod.
Pomocí funkce IsMatch můžete ověřit, jestli uživatel zadal správný text do ovládacího prvku Text input. Můžete třeba ověřit, jestli uživatel zadal platnou e-mailovou adresu, než se výsledek uloží do vašeho zdroje dat. Pokud zadaný text nesplňuje vaše kritéria, přidejte další prvky, které uživatele vyzvou, aby zadaný text opravil.
Funkci Match použijte k extrakci prvního textového řetězce, který odpovídá vzoru, a funkci MatchAll k extrakci všech textových řetězců, které se shodují. Můžete také extrahovat dílčí shody a analyzovat složité řetězce.
Match vrátí záznam informací o první nalezené shodě a MatchAll vrátí tabulku záznamů pro každou nalezenou shodu. Záznam nebo záznamy obsahují:
Column | Type | Description |
---|---|---|
pojmenovaná dílčí shoda nebo dílčí shody | Text | Každá pojmenovaná dílčí shoda bude mít svůj vlastní sloupec. Vytvořte pojmenovanou dílčí shodu zadáním (?<název>...) v regulárním výrazu. Pokud pojmenovaná dílčí shoda má stejný název jako jeden z předdefinovaných sloupců (níže), má dílčí shoda přednost a je vygenerováno upozornění. Chcete-li se tomuto upozornění vyhnout, přejmenujte dílčí shodu. |
FullMatch | Text | Celý textový řetězec, který se shodoval. |
StartMatch | Počet | Počáteční pozice shody uvnitř vstupního textového řetězce. První znak řetězce vrací 1. |
Dílčí zápasy | Textová tabulka s jedním sloupcem (sloupec Value) | Tabulka pojmenovaných a nepojmenovaných dílčích shod v pořadí, v jakém jsou uvedeny v regulárním výrazu. Obecně platí, že s pojmenovanými dílčími shodami se snáze pracuje a jsou upřednostňovány. Funkci ForAll nebo funkce Last( FirstN( ... ) ) použijte pro práci s jednou dílčí shodou. Pokud v regulárním výrazu nejsou definovány žádné dílčí shody, bude tato tabulka přítomná, ale prázdná. |
Tyto funkce podporují MatchOptions. Standardně:
- Tyto funkce rozlišují ve shodách velká a malá písmena. Použijte MatchOptions.IgnoreCase, pokud nechcete ve shodách rozlišovat malá a velká písmena.
- IsMatch odpovídá celému textovému řetězci (Complete MatchOption), zatímco Match a MatchAll hledá shodu kdekoli v textovém řetězci (Obsahuje MatchOption). Použijte parametry Complete, Contains, BeginsWith nebo EndsWith, jak vyžaduje váš scénář.
IsMatch vrátí pravda pokud se textový řetězec shoduje se vzorem, nebo false pokud tomu tak není 't. Shoda vrátí prázdné pokud není nalezena žádná shoda, kterou lze otestovat pomocí Je prázdné funkce. MatchAll vrátí prázdnou tabulku, pokud není nalezena žádná shoda, kterou lze otestovat funkcí IsEmpty .
Pokud používáte funkci MatchAll pro rozdělení textového řetězce, zvažte použití funkce Split, která je jednodušší a rychlejší.
Vzory
Klíčem k používání těchto funkcí je popsání vzoru, se kterým se má řetězec shodovat. Vzor v textovém řetězci se popisuje jako kombinace:
- Obyčejných znaků, třeba "abc" nebo "123"
- Předdefinovaných vzorů, třeba Letter, MultipleDigits nebo Email (tyto vzory jsou definované ve výčtu shod)
- Kódů regulárních výrazů, třeba "\d+\s+\d+" nebo "[a-z]+"
Tyto prvky můžete kombinovat pomocí operátoru pro zřetězení řetězců &. Například "abc" & Digit & "\s+" je platný vzor, který se shoduje se znaky "a", "b" a "c", za kterými následuje číslice od 0 do 9, za kterou následuje aspoň jeden prázdný znak.
Obyčejné znaky
Nejjednodušším vzorem je posloupnost obyčejných znaků, které se mají přesně shodovat.
Například při použití s funkcí IsMatch řetězec "Hello" odpovídá přesně vzoru "Hello". Nic víc a nic méně. Řetězec „hello!“ neodpovídá vzoru z důvodu vykřičníku na konci a nesprávné velikosti písmena "h". (Způsoby, jak toto chování upravit, najdete v části Možnosti shody.)
V jazyce vzoru jsou některé znaky vyhrazené pro zvláštní účely. Pokud tyto znaky chcete použít, buď před znak napište \ (zpětné lomítko) na znamení, že se má znak brát doslova, nebo použijte některý z předdefinovaných vzorů, jak popisujeme dále v tomto tématu. Speciální znaky jsou uvedené v této tabulce:
Speciální znak | Popis |
---|---|
. | tečka |
? | otazník |
* | hvězdička |
+ | plus |
( ) | závorky |
[ ] | hranaté závorky |
{ } | složené závorky |
^ | caret |
$ | znak dolaru |
| | svislá čára neboli svislítko |
\ | zpětné lomítko |
Třeba shodu s "Hello?" můžete najít pomocí vzoru "Hello\?" s obráceným lomítkem před otazníkem.
Předdefinované vzory
Předdefinované vzory nabízejí jednoduchý způsob, jak najít shodu s jedním ze sady znaků nebo s posloupností více znaků. Pomocí operátoru pro zřetězení řetězců & můžete své vlastní textové řetězce zkombinovat se členy výčtu shod:
Výčet shod | Popis | Regulární výraz |
---|---|---|
Žádný | Zkontroluje shodu s libovolným znakem. | . |
Čárka | Zkontroluje shodu s čárkou. | , |
Číslice | Zkontroluje shodu s jednou číslicí (0 až 9). | \d |
Zkontroluje shodu s e-mailovou adresou, která obsahuje symbol „zavináče“ (@) a název domény obsahující tečku (.) | .+\@.+\\.[^\\.]{2,} |
|
Spojovník | Zkontroluje shodu se spojovníkem. | \- |
LeftParen | Zkontroluje shodu s levou závorkou (. | \( |
Dopis | Zkontroluje shodu s písmenem. | \p{L} |
Vícečíslic | Zkontroluje shodu s jednou nebo více číslicemi. | \d+ |
Vícepísmen | Zkontroluje shodu s jedním nebo více písmeny. | \p{L}+ |
VícenásobnéNonSpaces | Zkontroluje shodu s jedním nebo více znaky, které nepřidávají prázdné znaky (což není mezera, tabulátor nebo nový řádek). | \S+ |
MultipleSpaces | Zkontroluje shodu s jedním nebo více znaky, které přidávají prázdné znaky (mezera, tabulátor nebo nový řádek). | \s+ |
NonSpace | Zkontroluje shodu s jedním znakem, který nepřidává prázdný znak. | \S |
Volitelné číslice | Zkontroluje shodu s žádnou, jednou nebo více číslicemi. | \d* |
Nepovinná písmena | Zkontroluje shodu s žádným, jedním nebo více písmeny. | \p{L}* |
VolitelnéNonSpaces | Zkontroluje shodu s žádným, jedním nebo více znaky, které nepřidávají prázdné znaky. | \S* |
OptionalSpaces | Zkontroluje shodu s žádným, jedním nebo více znaky, které přidávají prázdné znaky. | \s* |
Období | Zkontroluje shodu s tečkou (.). | \. |
RightParen | Zkontroluje shodu s pravou závorkou ). | \) |
Plocha | Zkontroluje shodu se znakem, který přidává prázdný znak. | \s |
Tab | Zkontroluje shodu se znakem tabulátoru. | \t |
Třeba vzor "A" & MultipleDigits zkontroluje shodu s písmenem „A“, za kterým následuje jedna nebo více číslic.
Regulární výrazy
Vzor, který tyto funkce používají, je regulární výraz. K vytváření regulárních výrazů pomáhají obyčejné znaky a předdefinované vzory, které jsou popsané dříve v tomto tématu.
Regulární výrazy jsou velmi účinné, dostupné v řadě programovacích jazyků a používají se k nejrůznějším účelům. Často také mohou vypadat jako náhodná posloupnost interpunkčních znamének. Tento článek nepopisuje všechny aspekty regulárních výrazů, ale na internetu najdete spoustu informací, kurzů a nástrojů.
Regulární výrazy mají různé dialekty a Power Apps používá variantu dialektu JavaScriptu. Viz syntaxe regulárního výrazu pro úvod do syntaxe. Jsou podporovány pojmenované dílčí shody (někdy nazývané jako pojmenované skupiny zachycení):
- Pojmenované dílčí shody: (?<název> ...)
- Pojmenované zpětné odkazy: \k<název>
V tabulce výčtu shod dříve v tomto tématu se každý výčet objeví ve stejném řádku jako odpovídající regulární výraz.
Možnosti shody
Chování těchto funkcí můžete upravit zadáním jedné nebo více možností, které můžete kombinovat pomocí operátoru pro zřetězení řetězců (&).
Výčet možností shody | Description | Vliv na regulární výraz |
---|---|---|
MatchOptions.BeginsWith | Vzor se musí shodovat od začátku textu. | Přidá ^ na začátek regulárního výrazu. |
MatchOptions.Complete | Výchozí pro IsMatch. Vzor se musí shodovat s celým textovým řetězcem od začátku do konce. | Přidá ^ na začátek a $ na konec regulárního výrazu. |
MatchOptions.Contains | Výchozí pro Match a MatchAll. Vzor se musí nacházet někde v textu, ale nemusí být na začátku ani na konci. | Nezmění regulární výraz. |
MatchOptions.EndsWith | Vzor se musí shodovat s koncem textového řetězce. | Přidá $ na konec regulárního výrazu. |
MatchOptions.IgnoreCase | Zachází s velkými a malými písmeny jako s identickými. Ve výchozím nastavení se velikost písmen rozlišuje. | Nezmění regulární výraz. Tato volba je ekvivalentem standardního modifikátoru „i“ pro regulární výrazy. |
MatchOptions.Multiline | Kontroluje shodu na více řádcích. | Nezmění regulární výraz. Tato volba je ekvivalentem standardního modifikátoru „m“ pro regulární výrazy. |
Použití MatchAll je stejné jako použití standardního modifikátoru „g“ pro regulární výrazy.
Syntaxe
IsMatch ( Text, Vzor [, Možnosti ])
- Text – Povinné. Textový řetězec, který se má otestovat.
- Vzor – Povinné. Vzor pro testování, například textový řetězec. Zřetězte předdefinované vzory, které definuje výčet shod, nebo zadejte regulární výraz. Vzor musí být konstantní vzorec bez jakýchkoli proměnných, zdrojů dat nebo jiných dynamických odkazů, které se mění během běhu aplikace.
- Možnosti – Volitelné. Textový řetězec s kombinací hodnot z výčtu možností shody. Ve výchozím nastavení se používá MatchOptions.Complete.
Zápas ( Text, Vzor [, Možnosti ])
- Text – Povinné. Textový řetězec, který se má shodovat.
- Vzor – Povinné. Vzor pro shodu, například textový řetězec. Zřetězte předdefinované vzory, které definuje výčet shod, nebo zadejte regulární výraz. Vzor musí být konstantní vzorec bez jakýchkoli proměnných, zdrojů dat nebo jiných dynamických odkazů, které se mění během běhu aplikace.
- Možnosti – Volitelné. Textový řetězec s kombinací hodnot z výčtu možností shody. Ve výchozím nastavení se používá MatchOptions.Contains.
MatchAll ( Text, Vzor [, Možnosti ])
- Text – Povinné. Textový řetězec, který se má shodovat.
- Vzor – Povinné. Vzor pro shodu, například textový řetězec. Zřetězte předdefinované vzory, které definuje výčet shod, nebo zadejte regulární výraz. Vzor musí být konstantní vzorec bez jakýchkoli proměnných, zdrojů dat nebo jiných dynamických odkazů, které se mění během běhu aplikace.
- Možnosti – Volitelné. Textový řetězec s kombinací hodnot z výčtu možností shody. Ve výchozím nastavení se používá MatchOptions.Contains.
Příklady použití funkce IsMatch
Obyčejné znaky
Představte si, že vaše aplikace obsahuje ovládací prvek Text input s názvem TextInput1. Uživatel do tohoto ovládacího prvku zadá hodnoty, které se mají uložit do databáze.
Uživatel do prvku Textovézadání1 napíše Hello world.
Vzorec | Popis | Výsledek |
---|---|---|
IsMatch( TextInput1.Text, "Hello world" ) |
Zkontroluje, jestli se uživatelovo zadání přesně shoduje s textem „Hello world“. | věrný |
IsMatch( TextInput1.Text, "Good bye" ) |
Zkontroluje, jestli se uživatelovo zadání přesně shoduje s textem „Good bye“. | falešný |
IsMatch( TextInput1.Text, "hello", Contains ) |
Zkontroluje, jestli uživatelovo zadání obsahuje slovo „hello“ (s rozlišením velikosti písmen). | falešný |
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) |
Zkontroluje, jestli uživatelovo zadání obsahuje slovo „hello“ (bez rozlišení velikosti písmen). | věrný |
Předdefinované vzory
Vzorec | Popis | Výsledek |
---|---|---|
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) |
Odpovídá číslu sociálního pojištění v USA. | věrný |
IsMatch( "joan@contoso.com", Email ) |
Odpovídá e-mailové adrese. | věrný |
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) |
Odpovídá posloupnosti číslic následovaných tečkou a pak žádnou nebo více číslicemi. | věrný |
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) |
Odpovídá posloupnosti číslic následovaných tečkou a pak žádnou nebo více číslicemi. Tečka se v textu, který se má shodovat, nenachází, proto se tento vzor neshoduje. | falešný |
Regulární výrazy
Vzorec | Popis | Výsledek |
---|---|---|
IsMatch( "986", "\d+" ) |
Odpovídá celému číslu většímu než nula. | věrný |
IsMatch( "1.02", "\d+(\.\d\d)?" ) |
Odpovídá kladné peněžní částce. Pokud zadání obsahuje desetinnou tečku, musí obsahovat také dva číselné znaky za desetinnou tečkou. Například 3.00 je platné, ale 3.1 není. | věrný |
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) |
Odpovídá kladné nebo záporné peněžní částce. Pokud zadání obsahuje desetinnou tečku, musí obsahovat také dva číselné znaky za desetinnou tečkou. | věrný |
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) |
Odpovídá číslu sociálního pojištění v USA. Ověří formát, typ a délku zadaného pole. Řetězec, který se má shodovat, musí obsahovat tři číselné znaky, po kterých následuje spojovník a pak dva číselné znaky, po kterých následuje pomlčka a další čtyři číselné znaky. | věrný |
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) |
Stejné jako předchozí příklad, ale jeden ze spojovníků není v zadání na správném místě. | falešný |
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) |
Ověří silné heslo, které musí obsahovat osm, devět nebo deset znaků a kromě toho aspoň jednu číslici a aspoň jeden znak abecedy. Řetězec nesmí obsahovat speciální znaky. | falešný |
Příklady použití funkcí Match a MatchAll
Vzorec | Popis | Výsledek |
---|---|---|
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" |
Extrahuje pouze e-mailovou část kontaktních informací. | { 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 pouze e-mailovou část kontaktních informací. Nebyla nalezena žádná legální adresa (neexistuje znak @), takže funkce vrací blank hodnotu. | prázdný |
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) |
Extrahuje části jazyka, skriptu a oblasti jazykové značky, kterou vrátí funkce Language. Tyto výsledky odpovídají USA; viz dokumentace k funkci Language, kde najdete více příkladů. Operátor (?: seskupuje znaky, aniž by vytvořil další dílčí shodu. | { 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, minuty a sekundy z hodnoty doby trvání ISO 8601. Extrahovaná čísla jsou stále v textovém řetězci; použijte funkci Value pro převedení na číslo, než s ním budou provedeny matematické operace. | { hours: "2", minutes: "1", seconds: "39", FullMatch: "PT2H1M39S", SubMatches:["2","1","39"], StartMatch: 1 } |
Pojďme se podívat na poslední příklad. Pokud jste chtěli převést tento řetězec na hodnotu data a času pomocí funkce Time, musíte jednotlivě předat pojmenované dílčí shody. Chcete-li to provést, můžete použít funkci With pracující se záznamem vráceným funkcí Match:
With(
Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
Time( Value( hours ), Value( minutes ), Value( seconds ) )
)
Pro tyto příklady přidejte ovládací prvek Button, nastavte jeho vlastnost OnSelect na tento vzorec a potom vyberte tlačítko:
Set( pangram, "The quick brown fox jumps over the lazy dog." )
Vzorec | Popis | Výsledek |
---|---|---|
Match( pangram, "THE", IgnoreCase ) |
Najde všechny shody s „THE“ v textovém řetězci, který obsahuje proměnná pangram. Řetězec obsahuje dvě shody, ale vrátí se pouze první, protože používáte funkci Match a ne MatchAll. Sloupec SubMatches je prázdný, protože nebyly definovány žádné dílčí shody. | { FullMatch: „The“, SubMatches: [ ], StartMatch: 32 } |
MatchAll( pangram, "the" ) |
Najde všechny shody s „the“ v textovém řetězci, který obsahuje proměnná pangram. Test rozlišuje velká a malá písmena, takže je nalezena pouze druhá instance „the“. Sloupec SubMatches je prázdný, protože nebyly definovány žádné dílčí shody. | |
MatchAll( pangram, "the", IgnoreCase ) |
Najde všechny shody s „the“ v textovém řetězci, který obsahuje proměnná pangram. V tomto případě test nerozlišuje velká a malá písmena, takže jsou nalezeny oba případy slova. Sloupec SubMatches je prázdný, protože nebyly definovány žádné dílčí shody. | |
MatchAll( pangram, "\b\wo\w\b" ) |
Najde všechna třípísmenná slova se znakem „o“ uprostřed. Všimněte si, že je vyloučeno slovo „brown“, protože se nejedná o třípísmenné slovo, a proto se neshoduje s „\b“ (hranice [„boundary“] slova). | |
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) |
Odpovídá všem znakům mezi "fox" a "dog". | { between: "jumps over the lazy", FullMatch: "fox jumps over the lazy dog", SubMatches: [ "jumps over the lazy" ], StartMatch: 17 } |
Chcete-li zobrazit výsledky MatchAll v galerii:
Na prázdnou obrazovku vložte ovládací prvek prázdné svislé Gallery.
Nastavte vlastnost galerie Items na MatchAll (pangram, "\w+" ) nebo MatchAll(pangram, MultipleLetters ).
Uprostřed ovládacího prvku galerie vyberte „Přidat položku z karty Vložit“, čímž vyberete šablonu galerie.
Přidejte ovládací prvek Label do galerie šablony.
Nastavte vlastnost popisku Text na ThisItem.FullMatch.
Galerie je vyplněna jednotlivými slovy z našeho ukázkového textu. Chcete-li zobrazit všechna slova na jedné obrazovce, změňte velikost šablony galerie a ovládacího prvku štítku.