Funktionerna IsMatch, Match och MatchAll

Gäller: Arbetsyteappar Modellbaserade appar 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 och MatchAll returnerar en tabell med poster för varje matchning som hittats. Posten eller posterna innehåller:

Column Type Description
namngiven undermatchning eller undermatchningar 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 Antal Matchningens startposition i textsträngen. Det första tecknet i strängen är returnerar 1.
SubMatches 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. Match returnerar blank om det inte finns någon matchning som kan testas med funktionen IsBlank. MatchAll returnerar 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 Description
. 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
Any Matchar alla tecken. .
Comma Matchar ett kommatecken. ,
Digit Matchar en entalssiffra ("0" till "9"). \d
Email Matchar en e-postadress som innehåller symbolen "at" ("@") och ett domännamn som innehåller en punkt (".") .+\@.+\\.[^\\.]{2,}
Hyphen Matchar ett bindestreck. \-
LeftParen Matchar en vänsterparentes "(". \(
Letter Matchar en bokstav. \p{L}
MultipleDigits Matchar en eller flera siffror. \d+
MultipleLetters 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+
NonSpace Matchar ett enskilt tecken som inte lägger till blanksteg. \S
OptionalDigits Matchar ingen, en eller flera siffror. \d*
OptionalLetters Matchar ingen, en eller flera bokstäver. \p{L}*
OptionalNonSpaces Matchar inget, ett eller flera tecken som inte lägger till blanksteg. \S*
OptionalSpaces Matchar inget, ett eller flera tecken som lägger till blanksteg. \s*
Period Matchar en punkt ("."). \.
RightParen Matchar en högerparentes ")". \)
Space Matchar ett tecken som lägger till blanksteg. \s
Tab 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 Description 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 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, Pattern [, Options ] )

  • Text – obligatoriskt. Textsträngen som ska testas.
  • Pattern – Krävs. 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. Pattern måste vara en konstant formel utan variabler, data källor eller andra dynamiska referenser som ändras när programmet körs.
  • Options – Valfritt. En textsträngskombination av uppräkningsvärden i MatchOptions. Som standard används MatchOptions.Complete.

Match( Text, Pattern [, Options ] )

  • Text – obligatoriskt. Textsträngen som ska match.
  • Pattern – Krävs. 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. Pattern måste vara en konstant formel utan variabler, data källor eller andra dynamiska referenser som ändras när programmet körs.
  • Options – Valfritt. En textsträngskombination av uppräkningsvärden i MatchOptions. Som standard används MatchOptions.Contains.

MatchAll( Text, Pattern [, Options ] )

  • Text – obligatoriskt. Textsträngen som ska match.
  • Pattern – Krävs. 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. Pattern måste vara en konstant formel utan variabler, data källor eller andra dynamiska referenser som ändras när programmet körs.
  • Options – 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". true
IsMatch( TextInput1.Text, "Good bye" ) Testar om användarens indata matchar exakt med strängen "Good bye". false
IsMatch( TextInput1.Text, "hello", Contains ) Testar om användarens indata innehåller ordet "hello" (skiftlägeskänsligt). false
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Testar om användarens indata innehåller ordet "hello" (skiftlägesokänsligt). true

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 true
IsMatch( "joan@contoso.com", Email ) Matchar en e-postadress true
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) Matchar en sekvens av siffror, en punkt och sedan noll eller flera siffror. true
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. false

Reguljära uttryck

Formel Beskrivning Resultat
IsMatch( "986", "\d+" ) Matchar ett heltal som är större än noll. true
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. true
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. true
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. true
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. false
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. false

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 för pangram.
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 med IgnoreCase.
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). MatchAll för pangram med b, wo, w och b.
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:

  1. På en tom skärm sätter du in en tom lodrät Gallery kontroll.

  2. Ange galleriets egenskap Items till MatchAll( pangram, "\w+" ) eller MatchAll( pangram, MultipleLetters ).

    Objektgalleri.

  3. Välj "Lägg till ett objekt från fliken Infoga" i mitten av gallerikontrollen för att välja mall för galleriet.

  4. Lägg till en Label i gallerimallen.

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

    Textegenskap.