Funkce IsMatch, Match a MatchAll

Platí pro: aplikace plátna modelem řízené aplikace rozhraní příkazového řádku Power Platform

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.

Funkce Match vrátí záznam informací pro první nalezenou shodu a funkce 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.
SubMatches 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 (argument Complete pro MatchOption), zatímco Match a MatchAll hledají shodu kdekoli v textovém řetězci (argument Contains pro MatchOption). Použijte parametry Complete, Contains, BeginsWith nebo EndsWith, jak vyžaduje váš scénář.

Pokud se textový řetězec se vzorem shoduje, IsMatch vrátí true (pravda), v opačném případě vrátí false (nepravda). Funkce Match vrací prázdnou hodnotu, pokud není nalezena žádná shoda, kterou lze testovat pomocí funkce IsBlank. Funkce MatchAll vrací prázdnou tabulku, pokud není nalezena žádná shoda, kterou lze testovat pomocí funkce 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
Any Zkontroluje shodu s libovolným znakem. .
Comma Zkontroluje shodu s čárkou. ,
Digit Zkontroluje shodu s jednou číslicí (0 až 9). \d
Email Zkontroluje shodu s e-mailovou adresou, která obsahuje symbol „zavináče“ (@) a název domény obsahující tečku (.) .+\@.+\\.[^\\.]{2,}
Hyphen Zkontroluje shodu se spojovníkem. \-
LeftParen Zkontroluje shodu s levou závorkou (. \(
Letter Zkontroluje shodu s písmenem. \p{L}
MultipleDigits Zkontroluje shodu s jednou nebo více číslicemi. \d+
MultipleLetters Zkontroluje shodu s jedním nebo více písmeny. \p{L}+
MultipleNonSpaces 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
OptionalDigits Zkontroluje shodu s žádnou, jednou nebo více číslicemi. \d*
OptionalLetters Zkontroluje shodu s žádným, jedním nebo více písmeny. \p{L}*
OptionalNonSpaces 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*
Period Zkontroluje shodu s tečkou (.). \.
RightParen Zkontroluje shodu s pravou závorkou ). \)
Space 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ý argument. 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í při spuštění 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.

Match( Text; Vzor [; Možnosti ] )

  • Text – povinný argument. 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í při spuštění 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ý argument. 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í při spuštění 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“. true
IsMatch( TextInput1.Text, "Good bye" ) Zkontroluje, jestli se uživatelovo zadání přesně shoduje s textem „Good bye“. false
IsMatch( TextInput1.Text, "hello", Contains ) Zkontroluje, jestli uživatelovo zadání obsahuje slovo „hello“ (s rozlišením velikosti písmen). false
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Zkontroluje, jestli uživatelovo zadání obsahuje slovo „hello“ (bez rozlišení velikosti písmen). true

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. true
IsMatch( "joan@contoso.com", Email ) Odpovídá e-mailové adrese. true
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) Odpovídá posloupnosti číslic následovaných tečkou a pak žádnou nebo více číslicemi. true
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. false

Regulární výrazy

Vzorec Popis Výsledek
IsMatch( "986", "\d+" ) Odpovídá celému číslu většímu než nula. true
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í. true
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. true
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. true
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ě. false
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. false

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 pro pangram.
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 s IgnoreCase.
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). MatchAll pro pangram s b, wo, w a b.
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:

  1. Na prázdnou obrazovku vložte ovládací prvek prázdné svislé Gallery.

  2. Nastavte vlastnost galerie Items na MatchAll (pangram, "\w+" ) nebo MatchAll(pangram, MultipleLetters ).

    Galerie předmětů.

  3. Uprostřed ovládacího prvku galerie vyberte „Přidat položku z karty Vložit“, čímž vyberete šablonu galerie.

  4. Přidejte ovládací prvek Label do galerie šablony.

  5. 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.

    Vlastnost Text.