Funktionerna IsMatch, Match och MatchAll
Gäller för: Arbetsyteappar Modellbaserade appar Power Pages Power Platform CLI
Test för en matchning eller extraherar delar av en textsträng baserat på ett mönster.
Beskrivning
Funktionen IsMatch testar om en textsträng matchar ett mönster som kan innefatta vanliga tecken, fördefinierade mönster eller ett reguljärt uttryck. Funktionerna Match och MatchAll returnerar vad som matchades, inklusive underordnade matchningar.
Använd IsMatch för att verifiera vad en användare har skrivit i en Text Input-kontroll. Exempelvis kan du kontrollera om användaren har angett en giltig e-postadress innan resultatet sparas till din datakälla. Om posten inte matchar dina kriterier kan du lägga till andra kontroller som uppmanar användaren att korrigera posten.
Använd Match för att extrahera den första textsträngen som överensstämmer med ett mönster och MatchAll för att extrahera alla textsträngar som överensstämmer. Du kan även extrahera underordnade matchningar för att analysera komplexa strängar.
Match returnerar en post med information för den första matchningen som hittas, och MatchAll returnerar en tabell med poster för varje matchning som hittas. Posten eller posterna innehåller:
Kolumn | Typ | Beskrivning |
---|---|---|
Namngiven undermatchning eller delmatchningar | Text | Varje namngiven undermatchning har en egen kolumn. Skapa en namngiven under matchning med hjälp av (?<name>...) i det reguljära uttrycket. Om en namngiven undermatchning har samma namn som en av de fördefinierade kolumnerna (nedan), gäller undermatchningen prioritet och en varning genereras. Du kan undvika den här varningen genom att byta namn på del matchningen. |
FullMatch | Text | All textsträng som matchades. |
StartMatch (på engelska) | Antal | Matchningens startposition i textsträngen. Det första tecknet i strängen är returnerar 1. |
SubMatches (på engelska) | Tabell med en kolumn med en text (kolumn värde) | Tabellen med namngivna och icke namngivna undermatchningar i den ordning de visas i det reguljära uttrycket. Namngivna underordnade matchningar är vanligtvis enklare att arbeta med och uppmuntras. Använd funktionen ForAll eller funktionerna Last( FirstN( ... ) ) för att arbeta med en individuell undermatchning. Om inga undermatchningar har definierats i det reguljära uttrycket kommer den här tabellen att finnas men vara tom. |
Dessa funktioner stöder MatchOptions. Som standard:
- Dessa funktioner utför en skiftlägeskänslig matchning. Använd MatchOptions.IgnoreCase för att utföra skiftlägeskänsliga matchningar.
- IsMatch matchar hela textsträngen (Complete MatchOption), medan Match och MatchAll söker efter en matchning var som helst i textsträngen (Contains MatchOption). Use Complete, Contains, BeginsWith eller EndsWith som passar ditt scenario.
IsMatch returnerar true om textsträngen matchar mönstret eller false om den inte gör det. Matchning returnerar tomt om det inte finns någon matchning som kan testas med funktionen IsBlank . MatchAll returnerar en tom tabell om det inte finns någon matchning som kan testas med funktionen IsEmpty .
Om du använder MatchAll för att dela upp en text sträng bör du överväga att använda funktionen Split som är enklare och snabbare att använda.
Mönster
Dessa funktioner används genom att man beskriver det mönster som ska matchas. Du beskriver mönstret i en textsträng som en kombination av:
- Vanliga tecken, till exempel "abc" eller "123".
- Fördefinierade mönster, till exempel Letter, MultipleDigits eller Email. (Uppräkningen Match definierar dessa mönster.)
- Reguljära uttryckskoder som "\d+\s+\d+" eller "[a-z] +".
Kombinera de här elementen genom att använda strängsammanfogningens operatör &. Till exempel är "abc" & Digit & "\s+" ett giltigt mönster som matchar tecknen "a", "b" och "c", följt av en siffra från 0 till 9, följt av minst ett blanksteg.
Vanliga tecken
Den enklaste mönstret är en sekvens av vanliga tecken som ska matchas exakt.
Om t.ex. används med funktionen IsMatch matchar strängen "Hello" matchar mönster exakt "Hello". Varken mer eller mindre. Strängen "hello!" matchar inte mönstret på grund av utropstecknet i slutet och att bokstaven "h" är gemen. (Se MatchOptions för metoder att ändra det här beteendet.)
I mönsterspråket är vissa tecken reserverade för speciella ändamål. Om du vill använda dessa tecken sätter du antingen ett prefix på tecknet med ett \ (omvänt snedstreck) för att visa att tecknet ska tolkas bokstavligen, eller så använder du något av de fördefinierade mönstren som beskrivs senare i detta ämne. Följande tabell visar specialtecknen:
Specialtecken | Beskrivning |
---|---|
. | punkt |
? | frågetecken |
* | asterisk |
+ | plus |
( ) | parentes |
[ ] | hakparenteser |
{ } | klammerparenteser |
^ | textmarkör |
$ | dollartecken |
| | lodrätt streck |
\ | omvänt snedstreck |
Du kan till exempel matcha "Hello?" med hjälp av mönstren "Hello\?" med en omvänt snedstreck före frågetecknet.
Fördefinierade mönster
Fördefinierade mönster är ett enkelt sätt att matcha en uppsättning tecken, eller en sekvens med flera tecken. Använd strängsammanfogningens operator & till att kombinera egna textsträngar med medlemmar i uppräkningen Match:
Uppräkningen Match | Beskrivning | Reguljärt uttryck |
---|---|---|
Någon | Matchar alla tecken. | . |
Komma | Matchar ett kommatecken. | , |
Siffra | Matchar en entalssiffra ("0" till "9"). | \d |
E-post | Matchar en e-postadress som innehåller symbolen "at" ("@") och ett domännamn som innehåller en punkt (".") | .+\@.+\\.[^\\.]{2,} |
Bindestreck | Matchar ett bindestreck. | \- |
LeftParen | Matchar en vänsterparentes "(". | \( |
Brev | Matchar en bokstav. | \p{L} |
Flera siffror | Matchar en eller flera siffror. | \d+ |
MultipleLetters (flera bokstäver) | Matchar en eller flera bokstäver. | \p{L}+ |
MultipleNonSpaces | Matchar ett eller flera tecken som inte lägger till blanksteg (inget mellanslag, tabb, ny rad). | \S+ |
MultipleSpaces | Matchar ett eller flera tecken som lägger till blanksteg (mellanslag, tabb, ny rad). | \s+ |
Icke-mellanslag | Matchar ett enskilt tecken som inte lägger till blanksteg. | \S |
Valfria siffror | Matchar ingen, en eller flera siffror. | \d* |
OptionalLetters (valfria) | Matchar ingen, en eller flera bokstäver. | \p{L}* |
OptionalNonSpaces (Valfritt) | Matchar inget, ett eller flera tecken som inte lägger till blanksteg. | \S* |
OptionalSpaces (Valfritt) | Matchar inget, ett eller flera tecken som lägger till blanksteg. | \s* |
Period | Matchar en punkt ("."). | \. |
RightParen | Matchar en högerparentes ")". | \) |
Rymd | Matchar ett tecken som lägger till blanksteg. | \s |
Flik | Matchar en flikkaraktär. | \t |
Till exempel kommer mönstret "A" & MultipleDigits matcha bokstaven "A" följt av en eller flera siffror.
Reguljära uttryck
Det mönster som de här funktionerna använder är ett reguljärt uttryck. De vanliga karaktärerna och fördefinierade mönster som beskrivs tidigare i detta ämne hjälper till att bygga regelbundna uttryck.
Reguljära uttryck är mycket kraftfulla, finns i många programmeringsspråk och används för en mängd olika syften. De kan också ofta se ut som en slumpmässig sekvens av skiljetecken. Det går inte att i den här artikeln beskriva alla aspekter av reguljära uttryck, men det finns mängder av information, handledning och verktyg finns tillgängliga på webben.
Reguljära uttryck har olika dialekter och i Power Apps används en variant av JavaScript-dialekten. Se reguljärt uttryck syntax för en introduktion till syntax. Namngivna under matchningar (kallas ibland namngivna registreringsgrupper) stöds:
- Namngivna under matchningar: (?<name> ...)
- Namngivna bakreferenser: \k<name>
I tabellen Match för matchning tidigare i den här ämne visas varje enum på samma rad som motsvarande reguljära uttryck.
Alternativ för matchning
Du kan ändra beteendet hos dessa funktioner genom att ange ett eller flera alternativ, som du kan kombinera med hjälp av strängkopplingens operatör (&).
MatchOptions enum | Beskrivning | Påverkan på reguljära uttryck |
---|---|---|
MatchOptions.BeginsWith | Mönstret måste matcha från början av texten. | Lägger till ^ i början av det reguljära uttrycket. |
MatchOptions.Complete (på engelska) | Standard för IsMatch. Mönstret måste matcha hela strängen för texten, från början till slut. | Lägger till ^ i början och en $ i slutet av det reguljära uttrycket. |
MatchOptions.Contains | Standard för Match och MatchAll. Mönstret måste finnas någonstans i texten, men behöver inte inleda eller avsluta den. | Ändrar inte det reguljära uttrycket. |
MatchOptions.EndsWith | Mönstret måste matcha slutet på textsträngen. | Lägger till $ i slutet av det reguljära uttrycket. |
MatchOptions.IgnoreCase | Behandlar versaler och gemener som identiska. Som standard är matchning skiftlägeskänsligt. | Ändrar inte det reguljära uttrycket. Det här alternativet motsvarar standard "i"-modifieraren för reguljära uttryck. |
MatchOptions.Multiline | Matchar över flera rader. | Ändrar inte det reguljära uttrycket. Det här alternativet motsvarar standard "m"-modifieraren för reguljära uttryck. |
Använda MatchAll motsvarar användning av standard "g"-modifieraren för vanliga uttryck.
Syntax
IsMatch(Text,Mönster [, Alternativ ])
- Text – obligatoriskt. Textsträngen som ska testas.
- Mönster – obligatoriskt. Mönster som ska testas, som en textsträng. Sammanfoga fördefinierade mönster som uppräkningen Match definierar, eller ange ett reguljärt uttryck. Mönstret måste vara en konstant formel utan några variabler, datakällor eller andra dynamiska referenser som ändras när appen körs.
- Alternativ – Valfritt. En textsträngskombination av uppräkningsvärden i MatchOptions. Som standard används MatchOptions.Complete.
Match( text,mönster [, alternativ ])
- Text – obligatoriskt. Textsträngen som ska match.
- Mönster – obligatoriskt. Mönster som ska match, som en textsträng. Sammanfoga fördefinierade mönster som uppräkningen Match definierar, eller ange ett reguljärt uttryck. Mönstret måste vara en konstant formel utan några variabler, datakällor eller andra dynamiska referenser som ändras när appen körs.
- Alternativ – Valfritt. En textsträngskombination av uppräkningsvärden i MatchOptions. Som standard används MatchOptions.Contains.
MatchAll( Text,Mönster [, Alternativ ])
- Text – obligatoriskt. Textsträngen som ska match.
- Mönster – obligatoriskt. Mönster som ska match, som en textsträng. Sammanfoga fördefinierade mönster som uppräkningen Match definierar, eller ange ett reguljärt uttryck. Mönstret måste vara en konstant formel utan några variabler, datakällor eller andra dynamiska referenser som ändras när appen körs.
- Alternativ – Valfritt. En textsträngskombination av uppräkningsvärden i MatchOptions. Som standard används MatchOptions.Contains.
IsMatch exempel
Vanliga tecken
Vi antar att ditt program innehåller en Text Input-kontroll med namnet TextInput1. Användaren anger värden i den här kontrollen som ska lagras i en databas.
Användaren skriver Hello world i TextInput1.
Formel | Beskrivning | Resultat |
---|---|---|
IsMatch( TextInput1.Text, "Hello world" ) |
Testar om användarens indata matchar exakt med strängen "Hello world". | sann |
IsMatch( TextInput1.Text, "Good bye" ) |
Testar om användarens indata matchar exakt med strängen "Good bye". | falsk |
IsMatch( TextInput1.Text, "hello", Contains ) |
Testar om användarens indata innehåller ordet "hello" (skiftlägeskänsligt). | falsk |
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) |
Testar om användarens indata innehåller ordet "hello" (skiftlägesokänsligt). | sann |
Fördefinierade mönster
Formel | Beskrivning | Resultat |
---|---|---|
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) |
Matchar ett socialförsäkringsnummer i USA | sann |
IsMatch( "joan@contoso.com", Email ) |
Matchar en e-postadress | sann |
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) |
Matchar en sekvens av siffror, en punkt och sedan noll eller flera siffror. | sann |
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) |
Matchar en sekvens av siffror, en punkt och sedan noll eller flera siffror. Det finns inte någon punkt i texten till match så det här mönstret matchade inte. | falsk |
Reguljära uttryck
Formel | Beskrivning | Resultat |
---|---|---|
IsMatch( "986", "\d+" ) |
Matchar ett heltal som är större än noll. | sann |
IsMatch( "1.02", "\d+(\.\d\d)?" ) |
Matchar ett positivt valutabelopp. Om indatan innehåller ett decimaltecken, måste indatan även innehålla två numeriska tecken efter decimaltecknet. Till exempel är 3,00 giltigt, men inte 3,1. | sann |
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) |
Matchar ett positivt eller ett negativt valutabelopp. Om indatan innehåller ett decimaltecken, måste indatan även innehålla två numeriska tecken efter decimaltecknet. | sann |
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) |
Matchar ett socialförsäkringsnummer i USA Verifierar format, typ och längd på det angivna indatafältet. Strängen som ska matcha måste bestå av tre numeriska tecken följt av ett tankstreck, sedan två numeriska tecken följt av ett tankstreck och slutligen fyra numeriska tecken. | sann |
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) |
Samma som i föregående exempel, men ett av bindestrecken ligger på fel plats i indatan. | falsk |
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) |
Verifierar ett starkt lösenord som måste innehålla 8, 9 eller 10 tecken, samt minst en siffra och minst ett alfabetiskt tecken. Strängen får inte innehålla några specialtecken. | falsk |
Match och MatchAll exempel
Formel | Beskrivning | Resultat |
---|---|---|
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" |
Extraherar endast e-postdelen av kontaktinformationen. | { email: "bob.jones@contoso.com", FullMatch: "<bob.jones@contoso.com>", SubMatches: [ "bob.jones@contoso.com" ], StartMatch: 11 } |
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" |
Extraherar endast e-postdelen av kontaktinformationen. Det gick inte att hitta någon juridisk adress (det finns inget @-tecken), så funktionen returnerar blank. | blank |
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) |
Extraherar språket, skriptet och regionens delar av språketiketten som funktionen Language returneras. De här resultaten återspeglar USA, se funktionen Language dokumentation för fler exempel. (?: operatorn grupperas tecknen utan att ytterligare och undermatchning skapas. | { 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)?" ) |
Extraherar timmarna, minuter och sekunder från ett varaktighetsvärde i ISO 8601. De extraherade numren finns fortfarande i en text sträng. Använd funktionen Value för att konvertera den till ett tal innan matematiska åtgärder utförs på den. | { hours: "2", minutes: "1", seconds: "39", FullMatch: "PT2H1M39S", SubMatches:["2","1","39"], StartMatch: 1 } |
Låt oss detaljgranska i det förra exemplet. strängOm du vill konvertera den här strängen till ett datum/tid-värde med hjälp av funktionen Time tid måste du överföra samma underordnade matchningar separat. Om du vill göra detta kan du använda With som fungerar på posten som Match returnerar:
With(
Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
Time( Value( hours ), Value( minutes ), Value( seconds ) )
)
I dessa exempel lägger du till en Button kontroll anger du dess egenskap OnSelect för den här formeln och markerar sedan knappen:
Set( pangram, "The quick brown fox jumps over the lazy dog." )
Formel | Beskrivning | Resultat |
---|---|---|
Match( pangram, "THE", IgnoreCase ) |
Sök efter alla matchningar av "THE" i den textsträng som pangram-variabeln innehåller. Strängen innehåller två matchningar, men endast den första returneras eftersom du använder Match och inte MatchAll. Kolumnen SubMatches är tom eftersom inga undermatchningar har definierats. | { FullMatch: "The", SubMatches: [ ], StartMatch: 32 } |
MatchAll( pangram, "the" ) |
Sök efter alla matchningar av "the" i den textsträng som pangram-variabeln innehåller. Testet är skiftlägeskänsligt, så att endast den andra instansen av "the" hittas. Kolumnen SubMatches är tom eftersom inga undermatchningar har definierats. | |
MatchAll( pangram, "the", IgnoreCase ) |
Sök efter alla matchningar av "the" i den textsträng som pangram-variabeln innehåller. I det här fallet är testet inte skiftlägeskänsligt, så båda instanserna av ordet hittas. Kolumnen SubMatches är tom eftersom inga undermatchningar har definierats. | |
MatchAll( pangram, "\b\wo\w\b" ) |
Söker efter alla tre bokstäver med ett "o"-ord i mitten. Observera att "brun" inte är ett ord som består av tre bokstäver och därför inte kan matchas med "\b" (ordgräns). | |
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) |
Matchar alla tecken mellan "räv" och "hund". | { between: "jumps over the lazy", FullMatch: "fox jumps over the lazy dog", SubMatches: [ "jumps over the lazy" ], StartMatch: 17 } |
Så här visar du resultatet av MatchAll i ett galleri:
På en tom skärm sätter du in en tom lodrät Gallery kontroll.
Ange galleriets egenskap Items till MatchAll( pangram, "\w+" ) eller MatchAll( pangram, MultipleLetters ).
Välj "Lägg till ett objekt från fliken Infoga" i mitten av gallerikontrollen för att välja mall för galleriet.
Lägg till en Label i gallerimallen.
Ställ in etikettens Text till ThisItem.FullMatch.
Galleriet fylls i med varje ord i vår exempeltext. Ändra storlek på galleriets mall och label-kontrollen så att alla ord visas på samma skärm.