Funktionerne IsMatch, Match og MatchAll

Gælder for: Lærred-apps Modeldrevne apps 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 oplysningspost for den første forekomst, der blev fundet, og MatchAll returnerer en tabel med poster for alle forekomster, der er fundet. Posten eller posterne indeholder:

Column Skriv Beskrivelse
navngivet undermatch eller navngivne 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.
FullMatch 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 Matchog MatchAll søger efter et match et hvilket som helst sted 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 matcher mønsteret. Ellers returneres falsk. Match returnerer blank, hvis der ikke blev fundet et match, som kan testes med funktionen IsBlank. MatchAll returnerer en tom tabel, hvis der ikke blev fundet et match, som 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
Any Matcher ethvert tegn. .
Comma Matcher et komma. ,
Digit Matcher et enkelt ciffer ("0" til og med "9"). \d
Email Matcher en mailadresse, der indeholder tegnet ("@") samt et domænenavn, der indeholder et punktum (".") .+\@.+\\.[^\\.]{2,}
Hyphen Matcher en bindestreg. \-
LeftParen Matcher en venstreparentes "(". \(
Letter Matcher et bogstav. \p{L}
MultipleDigits Matcher et eller flere cifre. \d+
MultipleLetters 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+
MultipleSpaces Matcher et eller flere tegn, som tilføjer blanktegn (mellemrum, tabulator eller ny linje). \s+
NonSpace Matcher et enkelt tegn, der ikke tilføjer et mellemrum. \S
OptionalDigits Matcher nul, et eller flere cifre. \d*
OptionalLetters 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*
Period Matcher et punktum ("."). \.
RightParen Matcher en højreparentes ")". \)
Space 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.Contains 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( Text, Pattern [, Options ] )

  • Text – påkrævet. Den tekst, der skal testes.
  • Pattern – 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. Pattern skal være en konstant formel uden variabler, datakilder eller andre dynamiske referencer, der ændres, når appen kører.
  • Options – valgfrit. En tekststrengkombination af MatchOptions-optællingsværdierne. Som standard bruges MatchOptions.Complete.

Match( Text, Pattern [, Options ] )

  • Text – påkrævet. Den tekst, der skal matches.
  • Pattern – 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. Pattern skal være en konstant formel uden variabler, datakilder eller andre dynamiske referencer, der ændres, når appen kører.
  • Options – valgfrit. En tekststrengkombination af MatchOptions-optællingsværdierne. Som standard bruges MatchOptions.Contains.

MatchAll( Text, Pattern [, Options ] )

  • Text – påkrævet. Den tekst, der skal matches.
  • Pattern – 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. Pattern skal være en konstant formel uden variabler, datakilder eller andre dynamiske referencer, der ændres, når appen kører.
  • Options – 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. true
IsMatch( TextInput1.Text, "Good bye" ) Tester, om brugerens indtastning matcher strengen "Good bye" præcist. false
IsMatch( TextInput1.Text, "hello", Contains ) Tester, om brugerens input indeholder ordet "hello" (skelner mellem store og små bogstaver). false
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Tester, om brugerens input indeholder ordet "hello" (skelner ikke mellem store og små bogstaver). true

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 true
IsMatch( "joan@contoso.com", Email ) Matcher en mailadresse true
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) Matcher en sekvens af cifre, et punktum og derefter nul eller flere cifre. true
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. false

Regulære udtryk

Formel Beskrivelse Resultat
IsMatch( "986", "\d+" ) Matcher et heltal, som er større end nul. true
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. true
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. true
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. true
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) Det samme som det tidligere eksempel, men bindestregen er placeret forkert. false
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. false

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. blank
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 for pangram.
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 med IgnoreCase.
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). MatchAll for pangram med b, wo, w og b.
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:

  1. Indsæt et tomt lodret Gallery-kontrolelement på en tom skærm.

  2. Indstil galleriets Items-egenskab til MatchAll(pangram, "\w +") eller MatchAll(pangram, MultipleLetters).

    Elementgalleri.

  3. Vælg "Tilføj et element under fanen Indsæt" midt i gallery-kontrolelementet for at vælge skabelonen til galleriet.

  4. Føj et Label-kontrolelement til gelleriets skabelon.

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

    Egenskaben Text.