Funktionerne IsMatch, Match og MatchAll
Gælder for: Lærredapps Modelbaserede apps Power Pages Power Platform CLI
Tester efter et match eller udtrækker dele af en tekststreng, der er baseret på et mønster.
Beskrivelse
Funktionen IsMatch tester, om en tekststreng matcher et mønster, der kan bestå af almindelige tegn, foruddefinerede mønstre eller et regulært udtryk. Funktionerne Match og MatchAll returnerer, hvad der blev matchet, inklusive underresultater.
Brug IsMatch til at validere brugerens input i et Text input-kontrolelement. Du kan f.eks. kontrollere, om brugeren har angivet en gyldig mailadresse, inden du gemmer værdien i din datakilde. Hvis det indtastede ikke opfylder dine kriterier, kan du tilføje et andet kontrolelement, som beder brugeren angive en anden værdi.
Brug Match til at udtrække den første tekststreng, der svarer til et mønster, og MatchAll til at udtrække alle de tekststrenge, som er ens. Du kan også udtrække underresultater for at fortolke komplekse strenge.
Match returnerer en post med oplysninger om det første fundne match, og MatchAll returnerer en tabel med poster for hvert fundet match. Posten eller posterne indeholder:
Column | Skriv | Beskrivelse |
---|---|---|
navngivne undermatch eller undermatches | SMS-besked | Hvert navngivet underordnet match vil have sin egen kolonne. Opret et navngivet undermatch vha. (?<name>...) i det regulære udtryk. Hvis et navngivet undermatch har samme navn som en af de foruddefinerede kolonner (nedenunder), har undermatchet fortrinsret, og der genereres en advarsel. Hvis du vil undgå denne advarsel, skal du omdøbe undermatchet. |
FuldMatch | Text | Hele den tekststreng, der blev matchet. |
StartMatch | Antal | Startpositionen for matchet i den indtastede tekststreng. Det første tegn i strengen returnerer 1. |
SubMatches | Teksttabel med enkelt kolonne (kolonne værdi) | Tabellen med navngivne og ikke-navngivne undermatches i den rækkefølge, de vises i det regulære udtryk. Det er generelt nemmest og det opfordres til at have et navngivet undermatches med. Brug funktionen ForAll eller funktionerne Last ( FirstN( ... ) ) til at arbejde med et enkelt undermatch. Hvis der ikke er defineret nogen undermatches i det regulære udtryk, vises denne tabel, men den er tom. |
Disse funktioner understøtter MatchOptions. Som standard:
- Disse funktioner udfører match med forskel på store og små bogstaver. Brug MatchOptions.IgnoreCase til at udføre matches, som ikke skelner mellem store og små bogstaver.
- IsMatch matcher hele tekststrengen (Complete MatchOption), mens Match og MatchAll søger efter et match hvor som helst i tekststrengen (Contains MatchOption). Brug Complete, Contains, BeginsWith eller EndsWith, afhængigt af hvad der er relevant i dit scenario.
IsMatch returnerer sand , hvis tekststrengen svarer til mønsteret, eller falsk , hvis den ikke gør det. Match returnerer tom, hvis der ikke findes et match, der kan testes med funktionen IsBlank . MatchAll returnerer en tom tabel, hvis der ikke findes et match, der kan testes med funktionen IsEmpty .
Hvis du bruger MatchAll til at opdele en tekststreng, kan du overveje at bruge funktionen Split, som er mere enkel og hurtigere at bruge.
Mønstre
Nøgle til at bruge disse funktioner er at beskrive det mønster, der skal matches. Du kan beskrive mønsteret i en tekststreng som en kombination af:
- Almindelige tegn, f.eks. "abc" eller "123".
- Foruddefinerede mønstre, f.eks. Letter, MultipleDigits eller Email. (Mønstrene defineres med Match-optælleren.)
- Koder i regulære udtryk, f.eks. "\d+\s+\d+" eller "[a-z]+".
Kombiner disse elementer ved hjælp af operatoren til sammenkædning af strenge &. Mønsteret "abc" & Digit & "\s+" er f.eks. et gyldigt mønster, der matcher tegnene "a", "b" og "c" efterfulgt af et ciffer fra 0 til 9 efterfulgt af mindst ét mellemrum.
Almindelige tegn
Det mest enkle mønster er en sekvens af almindelige tegn, der skal matche præcist.
Når strengen "Hello" f.eks. bruges sammen med funktionen IsMatch, matches mønsteret "Hello" nøjagtigt. Hverken mere eller mindre. Strengen "hello!" matcher ikke til mønsteret, fordi den indeholder et udråbstegn til sidst, og fordi strengen starter med et lille "h". Du kan se, hvordan du kan ændre denne funktionsmåde, under MatchOptions.
I mønstersproget er nogle tegn reserveret til særlige formål. Hvis du vil bruge disse tegn, skal du anbringe tegnet \ (omvendt skråstreg) før tegnet for at indikere, at tegnet skal tages bogstaveligt, eller du skal bruge et af de foruddefinerede mønstre, som beskrevet senere i dette emne. I denne tabel vises specialtegnene:
Specialtegn | Beskrivelse |
---|---|
. | punktum |
? | spørgsmålstegn |
* | stjerne |
+ | plus |
( ) | parenteser |
[ ] | kantede parenteser |
{ } | krøllede klammeparenteser |
^ | caret |
$ | dollartegn |
| | lodret streg eller pipe-tegn |
\ | omvendt skråstreg |
Du kan f.eks. matche "Hej?" ved hjælp af mønsteret "Hej\?" med omvendt skråstreg foran spørgsmålstegnet.
Foruddefinerede mønstre
Foruddefinerede mønstre er en enkel måde til at matche et sæt af tegn, en sekvens af tegn eller flere tegn. Brug operatoren til sammenkædning af strenge & til at kombinere dine egne tekststrenge med medlemmerne af Match-fastteksten:
Match-optæller | Beskrivelse | Regulært udtryk |
---|---|---|
Enhver | Matcher ethvert tegn. | . |
Komma | Matcher et komma. | , |
Ciffer | Matcher et enkelt ciffer ("0" til og med "9"). | \d |
Matcher en mailadresse, der indeholder tegnet ("@") samt et domænenavn, der indeholder et punktum (".") | .+\@.+\\.[^\\.]{2,} |
|
Bindestreg | Matcher en bindestreg. | \- |
LeftParen | Matcher en venstreparentes "(". | \( |
Brev | Matcher et bogstav. | \p{L} |
Flere cifre | Matcher et eller flere cifre. | \d+ |
Flere bogstaver | Matcher et eller flere bogstaver. | \p{L}+ |
MultipleNonSpaces | Matcher et eller flere tegn, som ikke tilføjer blanktegn (ikke mellemrum, tabulator eller ny linje). | \S+ |
Flere mellemrum | Matcher et eller flere tegn, som tilføjer blanktegn (mellemrum, tabulator eller ny linje). | \s+ |
Ikke-mellemrum | Matcher et enkelt tegn, der ikke tilføjer et mellemrum. | \S |
OptionalCifre | Matcher nul, et eller flere cifre. | \d* |
Valgfrie bogstaver | Matcher nul, et eller flere bogstaver. | \p{L}* |
OptionalNonSpaces | Matcher nul, et eller flere tegn, der ikke tilføjer mellemrum. | \S* |
OptionalSpaces | Matcher nul, et eller flere tegn, der tilføjer mellemrum. | \s* |
Periode | Matcher et punktum ("."). | \. |
HøjreParen | Matcher en højreparentes ")". | \) |
Rum | Matcher et tegn, der tilføjer et mellemrum. | \s |
Fane | Matcher et tabulatortegn. | \t |
Mønsteret "A" & MultipleDigits vil f.eks. matche bogstavet "A" efterfulgt af et eller flere cifre.
Regulære udtryk
Det mønster, som disse funktioner bruger, er et regulært udtryk. De almindelige tegn og foruddefinerede mønstre, der er beskrevet ovenfor i dette emne, kan bruges til at opbygge regulære udtryk.
Regulære udtryk er meget effektive, tilgængelige i mange programmeringssprog og bruges til en lang række formål. De kan også ofte ligne en vilkårlig række tegnsætningstegn. Denne artikel kan ikke beskrive alle aspekter af regulære udtryk, men der er udgivet et væld af oplysninger, selvstudier og værktøjer på internettet, hvor du kan finde hjælp.
Regulære udtryk har forskellige dialekter, og Power Apps bruger en variant af JavaScript-dialekten. Se syntaksen for regulære udtryk for at få en introduktion til syntaksen. Navngivne undermatches (kaldes også for indhentningsgrupper) understøttes:
- Navngivne undermatches: (?<name> ...)
- Navngivne tilbagereferencer: \k<name>
I optællingstabellen Match, der tidligere blev oprettet i dette emne, vises hver optælling i samme række som det tilsvarende søgemønster.
Match-indstillinger
Du kan ændre funktionsmåden for disse funktioner ved at angive en eller flere indstillinger, som du kan kombinere ved hjælp af operatoren til sammenkædning af strenge (&).
MatchOptions-optæller | Description | Betydning for et regulært udtryk |
---|---|---|
MatchOptions.BeginsWith | Mønsteret skal matche starten af teksten. | Føjer et ^ til starten af det regulære udtryk. |
MatchOptions.Complete | Standard for IsMatch. Mønsteret skal matche hele tekststrengen fra start til slut. | Føjer et ^ til starten af og et $ til slutningen af det regulære udtryk. |
MatchOptions.Indeholder | Standardværdien for Match og MatchAll. Mønsteret skal findes et vilkårligt sted i teksten, men behøver ikke at være placeret først eller sidst. | Ændrer ikke det regulære udtryk. |
MatchOptions.EndsWith | Mønsteret skal matche slutningen af tekststrengen. | Føjer et $ til slutningen af det regulære udtryk. |
MatchOptions.IgnoreCase | Behandler store og små bogstaver som identiske. Som standard skelnes der mellem store og små bogstaver. | Ændrer ikke det regulære udtryk. Denne indstilling svarer til standardmodifikatoren "i" til regulære udtryk. |
MatchOptions.Multiline | Matcher over flere linjer. | Ændrer ikke det regulære udtryk. Denne indstilling svarer til standardmodifikatoren "m" til regulære udtryk. |
Brug af MatchAll svarer til at bruge standardmodifikatoren "g" til regulære udtryk.
Syntaks
IsMatch( Tekst; Mønster [; Indstillinger ] )
- Tekst – Påkrævet. Den tekst, der skal testes.
- Mønster – Påkrævet. Det mønster, der skal testes, som en tekststreng. Sammensæt foruddefinerede mønstre, som Match-optælleren definerer, eller angiv et regulært udtryk. Mønster skal være en konstant formel uden variabler, datakilder eller andre dynamiske referencer, der ændres, når appen kører.
- Valgmuligheder – Valgfrit. En tekststrengkombination af MatchOptions-optællingsværdierne. Som standard bruges MatchOptions.Complete.
Match( Tekst; Mønster [; Indstillinger ] )
- Tekst – Påkrævet. Den tekst, der skal matches.
- Mønster – Påkrævet. Det mønster, der skal matches som en tekststreng. Sammensæt foruddefinerede mønstre, som Match-optælleren definerer, eller angiv et regulært udtryk. Mønster skal være en konstant formel uden variabler, datakilder eller andre dynamiske referencer, der ændres, når appen kører.
- Valgmuligheder – Valgfrit. En tekststrengkombination af MatchOptions-optællingsværdierne. Som standard bruges MatchOptions.Contains.
MatchAll( Tekst; Mønster [; Indstillinger ] )
- Tekst – Påkrævet. Den tekst, der skal matches.
- Mønster – Påkrævet. Det mønster, der skal matches som en tekststreng. Sammensæt foruddefinerede mønstre, som Match-optælleren definerer, eller angiv et regulært udtryk. Mønster skal være en konstant formel uden variabler, datakilder eller andre dynamiske referencer, der ændres, når appen kører.
- Valgmuligheder – Valgfrit. En tekststrengkombination af MatchOptions-optællingsværdierne. Som standard bruges MatchOptions.Contains.
IsMatch-eksempler
Almindelige tegn
Forestil dig, at din app indeholder et Text input-kontrolelement med navnet TextInput1. Brugeren indtaster værdier i dette kontrolelement, der skal gemmes i en database.
Brugeren skriver Hello world i TextInput1.
Formel | Beskrivelse | Resultat |
---|---|---|
IsMatch( TextInput1.Text, "Hello world" ) |
Tester, om brugerens indtastning matcher strengen "Hello world" præcist. | sand |
IsMatch( TextInput1.Text, "Good bye" ) |
Tester, om brugerens indtastning matcher strengen "Good bye" præcist. | falsk |
IsMatch( TextInput1.Text, "hello", Contains ) |
Tester, om brugerens input indeholder ordet "hello" (skelner mellem store og små bogstaver). | falsk |
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) |
Tester, om brugerens input indeholder ordet "hello" (skelner ikke mellem store og små bogstaver). | sand |
Foruddefinerede mønstre
Formel | Beskrivelse | Resultat |
---|---|---|
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) |
Matcher et dansk CPR-nummer | sand |
IsMatch( "joan@contoso.com", Email ) |
Matcher en mailadresse | sand |
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) |
Matcher en sekvens af cifre, et punktum og derefter nul eller flere cifre. | sand |
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) |
Matcher en sekvens af cifre, et punktum og derefter nul eller flere cifre. Der findes ikke et punktum i teksten at matche, så mønsteret matcher ikke. | falsk |
Regulære udtryk
Formel | Beskrivelse | Resultat |
---|---|---|
IsMatch( "986", "\d+" ) |
Matcher et heltal, som er større end nul. | sand |
IsMatch( "1.02", "\d+(\.\d\d)?" ) |
Matcher et positivt valutabeløb. Hvis inputværdien indeholder et decimalkomma, skal inputværdien også indeholde to numeriske tegn efter decimalkommaet. For eksempel er 3,00 en gyldig værdi, mens 3,1 ikke er. | sand |
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) |
Matcher et positivt eller negativt valutabeløb. Hvis inputværdien indeholder et decimalkomma, skal inputværdien også indeholde to numeriske tegn efter decimalkommaet. | sand |
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) |
Matcher et dansk CPR-nummer. Validerer formatet, typen og længden af det angivne inputfelt. Strengen skal matche seks numeriske tegn efterfulgt af en bindestreg og derefter fire numeriske tegn. | sand |
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) |
Det samme som det tidligere eksempel, men bindestregen er placeret forkert. | falsk |
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) |
Validerer en stærk adgangskode, som skal bestå af otte, ni eller 10 tegn, mindst ét ciffer og mindst ét bogstav. Strengen må ikke indeholde specialtegn. | falsk |
Match- og MatchAll-eksempler
Formel | Beskrivelse | Resultat |
---|---|---|
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" |
Udtrækker kun maildelen af kontaktoplysningerne. | { email: "bob.jones@contoso.com", FullMatch: "<bob.jones@contoso.com>", SubMatches: [ "bob.jones@contoso.com" ], StartMatch: 11 } |
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" |
Udtrækker kun maildelen af kontaktoplysningerne. Der blev ikke fundet nogen lovlig adresse (der er intet @-tegn), og funktionen returnerer derfor blank. | hvid |
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) |
Udtrækker sprog-, script- og områdedelen af den sprogkode, som funktionen Language returner. Disse resultater afspejler USA. Se dokumentationen til funktionen Language for flere eksempler. Operatoren (?: grupperer tegn uden at oprette en ny undermatch. | { sprog: "en", script: blank, område: "US", FullMatch: "en-US", SubMatches: [ "en", "", "US" ], StartMatch: 1 } |
Match( "PT2H1M39S", "PT(?:<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ) |
Udtrækker timer, minutter og sekunder fra en ISO 8601-varighedsværdi. De udtrukne tal er stadig i en tekststreng. Brug funktionen Value til at konvertere den til et tal, før der udføres matematiske beregninger på det. | { timer: "2", minutter: "1", sekunder: "39", FullMatch: "PT2H1M39S", SubMatches:["2","1","39"], StartMatch: 1 } |
Lad os dykke ind i det sidste eksempel. Hvis du vil konvertere denne streng til en dato/klokkeslætsværdi ved hjælp af funktionen Time, skal du videresende de navngivne undermatches individuelt. Det gør du ved at bruge funktionen With, der kører på den post, som Matchreturnerer:
With(
Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
Time( Value( hours ), Value( minutes ), Value( seconds ) )
)
I disse eksempler skal du tilføje et Button-kontrolelement, indstille egenskaben OnSelect til denne formel og derefter vælge knappen:
Set( pangram, "The quick brown fox jumps over the lazy dog." )
Formel | Beskrivelse | Resultat |
---|---|---|
Match( pangram, "THE", IgnoreCase ) |
Find alle matches af "THE" i den tekststreng, som variablen pangramindeholder. Strengen indeholder to matches, men det er kun den første, der returneres, da du bruger Match og ikke MatchAll. Kolonnerne SubMatches er tom, da der ikke er defineret nogen under resultater. | { FullMatch: "The", SubMatches: [ ], StartMatch: 32 } |
MatchAll( pangram, "the" ) |
Find alle matches af "the" i den tekststreng, som variablen pangramindeholder. Testen skelner mellem store og små bogstaver, så det er kun den anden forekomst af "the", der findes. Kolonnerne SubMatches er tom, da der ikke er defineret nogen under resultater. | |
MatchAll( pangram, "the", IgnoreCase ) |
Find alle matches af "the" i den tekststreng, som variablen pangramindeholder. I dette tilfælde skelner testen ikke mellem store og små bogstaver, så begge forekomster af ordet bliver fundet. Kolonnerne SubMatches er tom, da der ikke er defineret nogen under resultater. | |
MatchAll( pangram, "\b\wo\w\b" ) |
Finder alle tre bogstaver med et "o" i midten. Bemærk, at "brown" er udeladt, da den ikke er et ord på tre bogstaver og derfor ikke matcher "\b" (word boundary). | |
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) |
Matcher alle tegn mellem "fox" og "dog". | { between: "jumps over the lazy", FullMatch: "fox jumps over the lazy dog", SubMatches: [ "jumps over the lazy" ], StartMatch: 17 } |
Sådan får du vist resultaterne af MatchAll i et galleri:
Indsæt et tomt lodret Gallery-kontrolelement på en tom skærm.
Indstil galleriets Items-egenskab til MatchAll(pangram, "\w +") eller MatchAll(pangram, MultipleLetters).
Vælg "Tilføj et element under fanen Indsæt" midt i gallery-kontrolelementet for at vælge skabelonen til galleriet.
Føj et Label-kontrolelement til gelleriets skabelon.
Indstil etikettens Text-egenskab til ThisItem.FullMatch.
Galleriet udfyldes med de enkelte ord i eksempelteksten. Tilpas størrelsen på galleriets skabelon og kontrolelementet til etiketter for at få vist alle ordene på ét skærmbillede.