Del via


Funksjonene IsMatch, Match og MatchAll

Gjelder: Lerretsapper Modelldrevne apper Power Platform CLI

Tester for å finne et treff eller trekker ut deler av en tekststreng basert på et mønster.

Beskrivelse

IsMatch-funksjonen tester om en tekststreng samsvarer med et mønster, som kan omfatte vanlige tegn, forhåndsdefinerte mønstre eller et vanlig uttrykk. Funksjonene Match og MatchAll returnerer treff, inkludert deltreff.

Bruk IsMatch til å validere det en bruker har skrevet inn i en Text input-kontroll. Du kan for eksempel kontrollere om brukeren har angitt en gyldig e-postadresse før resultatet lagres i datakilden. Hvis oppføringen ikke samsvarer med vilkårene dine, kan du legge til andre kontroller som ber brukeren om å rette oppføringen.

Bruk Match for å trekke ut den første tekststrengen som samsvarer med et mønster, og MatchAll for å trekke ut alle tekststrenger som samsvarer. Du kan også trekke ut underordnede treff for å analysere komplekse strenger.

Match returnerer en oppføring med informasjon for det første treffet som blir funnet, og MatchAll returnerer en tabell med oppføringer for hvert treff som blir funnet. Oppføringen eller oppføringene inneholder følgende:

Column Type Bekrivelse
navngitte deltreff eller deltreff Tekstmelding Alle navngitte deltreff vil ha sin egen kolonne. Opprett et navngitt deltreff ved hjelp av (?<name>...) i det vanlige uttrykket. Hvis et navngitt deltreff har samme navn som en av de forhåndsdefinerte kolonnene (under), har deltreffet forrang, og det genereres en advarsel. Du kan unngå denne advarselen ved å gi nytt navn til deltreffet.
FullMatch Tekst Alle tekststrengene som ble samsvart.
StartMatch Nummer Startposisjonen for treffet i inndata-tekststrengen. Det første tegnet i strengen returnerer 1.
SubMatches Tabell med én kolonne med tekst (kolonne-verdi) Tabellen med navngitte og ikke-navngitte deltreff i rekkefølgen de vises i, i det vanlige uttrykket. Navngitte deltreff er generelt enklere å arbeide med, og anbefales. Bruk ForAll-funksjonen eller Last( FirstN( ... ) )-funksjoner til å arbeide med et individuelt deltreff. Hvis det ikke er definert noen deltreff i det vanlige uttrykket, vises denne tabellen, men den blir tom.

Disse funksjonene støtter MatchOptions. Som standard:

  • Disse funksjonene utfører en samsvarstest som skiller mellom små og store bokstaver. Bruk MatchOptions.IgnoreCase til å utføre samsvarstest uten å skille mellom små og store bokstaver.
  • IsMatch samsvarer med hele tekststrengen (Complete MatchOption), mens Match og MatchAll søker etter et treff hvor som helst i tekststrengen (Contains MatchOption). Bruk Complete, Contains, BeginsWith eller EndsWith som det passer for ditt scenario.

IsMatch returnerer sann hvis tekststrengen samsvarer med mønsteret eller usann hvis den ikke gjør det. Match returnerer tom hvis det ikke finnes treff som kan testes med IsBlank-funksjonen. MatchAll returnerer en tom tabell hvis det ikke finnes treff som kan testes med IsEmpty-funksjonen.

Hvis du bruker MatchAll til å dele en tekststreng, bør du vurdere å bruke Split-funksjonen, som er enklere og raskere å bruke.

Mønstre

Nøkkelen til å bruke disse funksjonene er å beskrive mønsteret teksten skal samsvare med. Du beskriver mønsteret i en tekststreng som en kombinasjon av:

  • Vanlige tegn, for eksempel abc eller 123.
  • Forhåndsdefinerte mønstre, for eksempel Letter, MultipleDigits eller Email. (Match-enumeratoren definerer disse mønstrene.)
  • Vanlige uttrykkskoder, for eksempel \d+\s+\d+ eller [a-z]+.

Kombiner disse elementene ved hjelp av operatoren & for sammenslåing av streng. For eksempel: abc & Digit & \s+ er et gyldig mønster som samsvarer med tegnene a, b og c, etterfulgt av et tall mellom 0 og 9, etterfulgt av minst ett mellomromstegn.

Vanlige tegn

Det enkleste mønsteret er en rekke vanlige tegn som skal samsvare nøyaktig.

Ved bruk med IsMatch-funksjonen samsvarer for eksempel strengen "Hei" nøyaktig med mønsteret "Hei". Ikke mer eller mindre. Strengen "Hei!" samsvarer ikke med mønsteret på grunn av utropstegnet på slutten, og fordi stor bokstav er feil for bokstaven h. (Se MatchOptions for hvordan du kan endre denne virkemåten.)

Bestemte tegn er reservert for spesielle formål i mønsterspråket. Hvis du vil bruke disse tegnene, kan du enten foranstille tegnet med en \ (omvendt skråstrek) for å angi at tegnet skal tas bokstavelig, eller bruke et av de forhåndsdefinerte mønstrene beskrevet senere i dette emnet. Denne tabellen viser spesialtegnene:

Spesialtegn Bekrivelse
. prikk eller punkt
? spørsmålstegn
* stjerne
+ plus
( ) parenteser
[ ] hakeparenteser
{ } klammeparenteser
^ cirkumflekstegn
$ dollartegn
| loddrett strek
\ omvendt skråstrek

Du kan for eksempel samsvare med "Hei?" ved å bruke mønsteret "Hei\?" med en omvendt skråstrek foran spørsmålstegnet.

Forhåndsdefinerte mønstre

Med forhåndsdefinerte mønstre er det enkelt å samsvare med et sett med tegn eller en sekvens med flere tegn. Bruk operatoren & for sammenslåing av streng til å kombinere egne tekststrenger med medlemmer av Match-opplistingen:

Match-enumerator Beskrivelse Vanlig uttrykk
Any Samsvarer med et hvilket som helst tegn. .
Comma Samsvarer med et komma. ,
Digit Samsvarer med ett enkelt siffer (fra 0 til 9). \d
Email Samsvarer med en e-postadresse som inneholder en krøllalfa ("@") og et domenenavn som inneholder et punktum (.) .+\@.+\\.[^\\.]{2,}
Hyphen Samsvarer med en bindestrek. \-
LeftParen Samsvarer med en venstreparentes «(». \(
Letter Samsvarer med en bokstav. \p{L}
MultipleDigits Samsvarer med ett eller flere siffer. \d+
MultipleLetters Samsvarer med én eller flere bokstaver. \p{L}+
MultipleNonSpaces Samsvarer med ett eller flere tegn som ikke legger til mellomrom (ikke mellomrom, tabulator eller linjeskift). \S+
MultipleSpaces Samsvarer med ett eller flere tegn som legger til mellomrom (mellomrom, tabulator eller linjeskift). \s+
NonSpace Samsvarer med ett enkelt tegn som ikke legger til mellomrom. \S
OptionalDigits Samsvarer med ingen, ett eller flere siffer. \d*
OptionalLetters Samsvarer med ingen, én eller flere bokstaver. \p{L}*
OptionalNonSpaces Samsvarer med ingen, ett eller flere tegn som ikke legger til mellomrom. \S*
OptionalSpaces Samsvarer med ingen, ett eller flere tegn som legger til mellomrom. \s*
Period Samsvarer med et punktum eller en prikk (.). \.
RightParen Samsvarer med en høyreparentes «)». \)
Space Samsvarer med et tegn som legger til mellomrom. \s
Tab Samsvarer med et tabulatortegn. \t

For eksempel samsvarer mønsteret A & MultipleDigits med bokstaven A etterfulgt av ett eller flere sifre.

Vanlige uttrykk

Mønsteret som disse funksjonene bruker, er et vanlig uttrykk. Vanlige tegn og forhåndsdefinerte mønstre som er beskrevet tidligere i dette emnet, hjelper deg med å bygge vanlige uttrykk.

Vanlige uttrykk er svært kraftige, er tilgjengelig i mange programmeringsspråk og brukes til en rekke ulike formål. De kan også se ut som en tilfeldig rekkefølge av skilletegn. Denne artikkelen beskriver ikke alle aspektene ved vanlige uttrykk, men en mengde informasjon, opplæringer og verktøy er publisert på nettet for å hjelpe deg.

Vanlige uttrykk har forskjellige dialekter, og Power Apps bruker en variant av JavaScript-dialekten. Se syntaks for vanlig uttrykk for å få en innføring i syntaksen. Navngitte deltreff (noen ganger kalt navngitte registreringsgrupper) støttes:

  • Navngitte deltreff: (?<name> ...)
  • Navngitte bakreferanser: \k<name>

I Match-opplistingstabellen tidligere i dette emnet vises hver opplisting i samme rad som det tilsvarende vanlige uttrykket.

Samsvarsalternativer

Du kan endre virkemåten til disse funksjonene ved å angi ett eller flere alternativer, som du kan kombinere ved hjelp av operatoren (&) for strengsammenkobling.

MatchOptions-enumerator Description Innvirkning på et vanlig uttrykk
MatchOptions.BeginsWith Mønsteret må samsvare med begynnelsen av teksten. Legger til en ^ foran det vanlige uttrykket.
MatchOptions.Complete Standard for IsMatch. Mønsteret må samsvare med hele tekststrengen, fra begynnelse til slutt. Legger til en ^ foran det vanlige uttrykket og $ på slutten av det.
MatchOptions.Contains Standard for Match og MatchAll. Mønsteret må vises et sted i teksten, men det trenger ikke å være på starten eller slutten. Endrer ikke det vanlige uttrykket.
MatchOptions.EndsWith Mønsteret må samsvare med slutten på tekststrengen. Legger til en $ på slutten av det vanlige uttrykket.
MatchOptions.IgnoreCase Behandler små og store bokstaver som identiske. Som standard skiller samsvar mellom små og store bokstaver. Endrer ikke det vanlige uttrykket. Dette alternativet svarer til standard "i"-modifikator for vanlige uttrykk.
MatchOptions.Multiline Samsvar på tvers av flere linjer. Endrer ikke det vanlige uttrykket. Dette alternativet svarer til standard "m"-modifikator for vanlige uttrykk.

Bruk av MatchAll er det samme som å bruke standard modifikatoren "g" for vanlige uttrykk.

Syntaks

IsMatch( Text, Pattern [, Options ] )

  • Text – obligatorisk. Tekststrengen som skal testes.
  • Pattern – obligatorisk. Mønsteret som skal testes, som en tekststreng. Kjed sammen forhåndsdefinerte mønstre som Match-enumeratoren definerer, eller angi et vanlig uttrykk. Pattern må være en konstant formel uten variabler, datakilder eller andre dynamiske referanser som blir endret etter hvert som appen kjøres.
  • Options – valgfritt. En tekststrengkombinasjon av enumeratorverdier for MatchOptions. Som standard brukes MatchOptions.Complete.

Match( Text, Pattern [, Options ] )

  • Text – obligatorisk. Tekststrengen som skal samsvares.
  • Pattern – obligatorisk. Mønsteret som skal samsvares som en tekststreng. Kjed sammen forhåndsdefinerte mønstre som Match-enumeratoren definerer, eller angi et vanlig uttrykk. Pattern må være en konstant formel uten variabler, datakilder eller andre dynamiske referanser som blir endret etter hvert som appen kjøres.
  • Options – valgfritt. En tekststrengkombinasjon av enumeratorverdier for MatchOptions. Som standard brukes MatchOptions.Contains.

MatchAll( Text, Pattern [, Options ] )

  • Text – obligatorisk. Tekststrengen som skal samsvares.
  • Pattern – obligatorisk. Mønsteret som skal samsvares som en tekststreng. Kjed sammen forhåndsdefinerte mønstre som Match-enumeratoren definerer, eller angi et vanlig uttrykk. Pattern må være en konstant formel uten variabler, datakilder eller andre dynamiske referanser som blir endret etter hvert som appen kjøres.
  • Options – valgfritt. En tekststrengkombinasjon av enumeratorverdier for MatchOptions. Som standard brukes MatchOptions.Contains.

IsMatch-eksempler

Vanlige tegn

Tenk deg at appen inneholder en kontroll for Text input med navnet TextInput1. Brukeren skriver inn verdier i denne kontrollen som skal lagres i en database.

Brukeren skriver inn Hei, verden i TextInput1.

Formel Beskrivelse Resultat
IsMatch( TextInput1.Text, "Hello world" ) Tester om brukerens inndata samsvarer nøyaktig med strengen «Hei, verden». true
IsMatch( TextInput1.Text, "Good bye" ) Tester om brukerens inndata samsvarer nøyaktig med strengen «Farvel». false
IsMatch( TextInput1.Text, "hello", Contains ) Tester om brukerens inndata inneholder ordet «hei» (skiller mellom store og små bokstaver). false
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Tester om brukerens inndata inneholder ordet «hei» (skiller ikke mellom store og små bokstaver). true

Forhåndsdefinerte mønstre

Formel Beskrivelse Resultat
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) Samsvarer med et personnummer for USA true
IsMatch( "joan@contoso.com", Email ) Samsvarer med en e-postadresse true
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) Samsvarer med en rekke sifre, et punktum og deretter ingen eller flere sifre. true
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) Samsvarer med en rekke sifre, et punktum og deretter ingen eller flere sifre. Et punktum vises ikke i teksten som skal samsvares, så dette mønsteret samsvarer ikke. false

Vanlige uttrykk

Formel Beskrivelse Resultat
IsMatch( "986", "\d+" ) Samsvarer med et heltall større enn null. true
IsMatch( "1.02", "\d+(\.\d\d)?" ) Samsvarer med et positivt valutabeløp. Hvis inndataene inneholder et desimaltegn, må inndataene også inneholde to numeriske tegn etter desimaltegnet. For eksempel er 3.00 gyldig, men ikke 3.1. true
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) Samsvarer med et positivt eller negativt valutabeløp. Hvis inndataene inneholder et desimaltegn, må inndataene også inneholde to numeriske tegn etter desimaltegnet. true
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) Samsvarer med et personnummer for USA. Validerer format, type og lengde for det angitte inndatafeltet. Strengen som skal samsvare, må bestå av tre numeriske tegn etterfulgt av en bindestrek og deretter to numeriske tegn etterfulgt av en bindestrek, og deretter fire numeriske tegn. true
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) Samme som det forrige eksemplet, men en av bindestrekene er på feil sted i inndataene. false
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) Validerer et sterkt passord, som må inneholde 8, 9 eller 10 tegn, i tillegg til minst ett siffer og minst én bokstav. Strengen kan ikke inneholde spesialtegn. false

Match- og MatchAll-eksempler

Formel Beskrivelse Resultat
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" Trekker ut bare e-postdelen av kontaktinformasjonen. {
e-post: "bob.jones@contoso.com",
FullMatch: "<bob.jones@contoso.com>",
SubMatches: [ "bob.jones@contoso.com" ],
StartMatch: 11
}
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" Trekker ut bare e-postdelen av kontaktinformasjonen. Finner ingen juridisk adresse (det er ingen @-tegn), så funksjonen returnerer blank. tom
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) Trekker ut språk-, skript- og områdedelene av språkkoden som returneres av Language-funksjonen. Disse resultatene gjenspeiler USA. Se Language-funksjonsdokumentasjonen hvis du vil ha flere eksempler. Operatoren (?: grupperer tegn uten å opprette et nytt deltreff. {
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)?" ) Trekker ut timer, minutter og sekunder fra en ISO 8601-varighetsverdi. De uttrukne tallene er fremdeles i en tekststreng. Bruk Value-funksjonen til å konvertere den til et tall før matematiske operasjoner utføres på den. {
hours: "2",
minutes: "1",
seconds: "39",
FullMatch: "PT2H1M39S",
SubMatches:["2","1","39"],
StartMatch: 1
}

La oss vise detaljer i det siste eksemplet. Hvis du vil konvertere denne strengen til en dato/klokkeslett-verdi ved hjelp av Time-funksjonen, må du sende inn de navngitte deltreffene enkeltvis. Hvis du vil gjøre dette, kan du bruke With-funksjonen for oppføringen som Match returnerer:

With(
    Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
   Time( Value( hours ), Value( minutes ), Value( seconds ) )
)

I disse eksemplene legger du til en knappekontroll, angir OnSelect-egenskapen til denne formelen, og deretter velger du knappen:

Set( pangram, "The quick brown fox jumps over the lazy dog." )
Formel Beskrivelse Resultat
Match( pangram, "THE", IgnoreCase ) Finn alle treff for "THE" i tekststrengen som pangram-variabelen inneholder. Strengen inneholder to treff, men bare den første returneres fordi du bruker Match og ikke MatchAll. SubMatches-kolonnen er tom fordi ingen deltreff ble definert. {
FullMatch: "The",
SubMatches: [ ],
StartMatch: 32
}
MatchAll( pangram, "the" ) Finn alle treff for "the" i tekststrengen som pangram-variabelen inneholder. Testen skiller mellom små og store bokstaver, så det er bare den andre forekomsten av "the" som blir funnet. SubMatches-kolonnen er tom fordi ingen deltreff ble definert. MatchAll for pangram.
MatchAll( pangram, "the", IgnoreCase ) Finn alle treff for "the" i tekststrengen som pangram-variabelen inneholder. I dette tilfellet skiller ikke testen mellom store og små bokstaver, så begge forekomstene av ordet blir funnet. SubMatches-kolonnen er tom fordi ingen deltreff ble definert. MatchAll med IgnoreCase.
MatchAll( pangram, "\b\wo\w\b" ) Finner alle ord med tre bokstaver med en "o" i midten. Vær oppmerksom på at "brown" utelates fordi det ikke er et ord på tre bokstaver, og derfor ikke samsvarer med "\b" (ordgrense). MatchAll for pangram med b, wo, w og b.
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) Samsvarer med alle tegnene mellom "fox" og "dog". {
between: "jumps over the lazy",
FullMatch: "fox jumps over the lazy dog",
SubMatches: [ "jumps over the lazy" ],
StartMatch: 17
}

Slik ser du resultatene av MatchAll i et galleri:

  1. Sett inn en tom, loddrett Gallery-kontroll i en tom skjerm.

  2. Angi Items-egenskapen for galleriet til MatchAll( pangram, "\w+" ) eller MatchAll( pangram, MultipleLetters ).

    Elementgalleri.

  3. Velg "Legg til et element fra Sett inn-fanen" midt i gallerikontrollen for å velge malen for galleriet.

  4. Legg til en Label-kontroll i malgalleriet.

  5. Sett etikettens Text-egenskap til ThisItem.FullMatch.

    Galleriet fylles ut med hvert ord i eksempelteksten. Endre størrelsen på galleriets mal og etikettkontrollen for å se alle ordene på ett skjermbilde.

    Text-egenskapen.