Sdílet prostřednictvím


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
E-mail 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 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.