IsMatch, Matchoch MatchAll funktioner

Gäller för: Arbetsyteappar Copilot Studio Modelldrivna appar Power Platform CLI Dataverse-funktioner Power Pages

Tester 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 bestå av vanliga tecken, fördefinierade mönster eller ett reguljärt uttryck. Funktionerna Match och MatchAll returnerar det som matchades, inklusive delmatchning.

Använd IsMatch för att verifiera vad en användare skrev i en textinmatningskontroll . Kontrollera till exempel om användaren har angett en giltig e-postadress innan resultatet sparas i datakällan. Om posten inte matchar dina villkor lägger du till andra kontroller som uppmanar användaren att åtgärda posten.

Använd Match för att extrahera den första textsträngen som matchar ett mönster och MatchAll för att extrahera alla textsträngar som matchar. Extrahera undermatchningar för att parsa komplexa strängar.

Match returnerar en post med information för den första matchningen som hittades 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 undermatchning med hjälp av (?<Namn>... ) i det reguljära uttrycket. Om en namngiven undermatchning har samma namn som en av de fördefinierade kolumnerna har delmatchningen företräde och en varning genereras. Byt namn på delmatchningen för att undvika den här varningen.
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, endast om MatchOptions.NumberedSubMatches används. Tabell med en kolumn med en text (kolumn värde) Tabellen med numrerade delmatchningsuppsättningar i den ordning som de visas i det reguljära uttrycket. I allmänhet är namngivna delmatchning enklare att arbeta med och uppmuntras. Använd funktionen ForAll eller Index för att arbeta med en enskild undermatchning. Om inga delmatchningsuppsättningar definieras 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ök efter en matchning var som helst i textsträngen (Innehåller MatchOption). Use Complete, Contains, BeginsWith eller EndsWith som passar ditt scenario.

IsMatch returnerar sant om textsträngen matchar mönstret eller false om den inte gör det. Match returnerar tomt om ingen matchning hittas som kan testas med funktionen IsBlank . MatchAll returnerar en tom tabell om ingen matchning hittas som kan testas med funktionen IsEmpty .

Om du använder MatchAll för att dela upp en textsträng bör du överväga att använda funktionen Dela , vilket är enklare och snabbare.

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 dessa element med strängsammanfogningsoperatorn &. 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

Det enklaste mönstret är en sekvens med vanliga tecken som matchar exakt.

När den IsMatch till exempel används med funktionen matchar strängen "Hello" mönstret "Hello" exakt. Varken mer eller mindre. Strängen "hello!" matchar inte mönstret på grund av utropstecknet i slutet och eftersom fallet är fel för bokstaven "h". (Se Match alternativ för olika sätt att ändra det här beteendet.)

I mönsterspråket är tecknen . ? * + ( ) [ ] ^ $ | \ reserverade för särskilda ändamål. Om du vill använda dessa tecken kan du antingen prefixa tecknet med ett \ (omvänt snedstreck) för att indikera att tecknet ska tas bokstavligen eller använda något av de fördefinierade mönstren. Du kan till exempel matcha strängen "Hello?" med hjälp av mönstret "Hello\\?" med ett 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ängsammanfogningsoperatorn & för att kombinera dina egna textsträngar med medlemmar i Match uppräkningen:

Match uppräkning Beskrivning Reguljärt uttryck
Någon Matchar alla tecken. .
Komma Matchar ett kommatecken ,. ,
Siffra Matchar en entalssiffra ("0" till "9"). \d
Skicka e-post Matchar en e-postadress som innehåller symbolen "at" ("@") och ett domännamn som innehåller en punkt (".") Se anteckning
Bindestreck Matchar ett bindestreck. - Se anteckning
LeftParen Matchar en vänster parentes (. \(
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 eller punkt .. \.
RightParen Matchar en höger parentes ). \)
Rymd Matchar ett tecken som lägger till blanksteg. \s
Flik Matchar en flikkaraktär. \t

Mönstret "A" och MultipleDigits matchar till exempel bokstaven "A" följt av en eller flera siffror.

Power Apps använder en annan definition för Match. E-post och Match. Bindestreck. Utvärdera Text( Match.Email ) för att se det reguljära uttryck som används av värden.

Reguljära uttryck

Det mönster som dessa funktioner använder kallas för ett reguljärt uttryck. Power Fxs specifika dialekt av reguljära uttryck beskrivs i Reguljära uttryck i Power Fx.

Reguljära uttryck är kraftfulla och har en mängd olika syften. De kan också se ut som en slumpmässig sekvens med skiljetecken. Den här artikeln beskriver inte alla aspekter av reguljära uttryck, men en mängd information, självstudier och verktyg finns tillgängliga online.

Reguljära uttryck har en lång historik och finns på många programmeringsspråk. Varje programmeringsspråk har sin egen dialekt av reguljära uttryck, och det finns få standarder. Vi strävar efter att se till att samma reguljära uttryck ger samma resultat i alla Power Fx-implementeringar. Kompatibilitet är inte lätt att uppnå eftersom Power Fx körs ovanpå JavaScript och .NET som har betydande skillnader. För att hantera körning på olika plattformar är vanliga Power Fx-uttryck begränsade till en delmängd av funktioner som stöds i stor utsträckning i hela branschen.

Därför kan vissa reguljära uttryck som kan fungera i andra miljöer blockeras eller kräva en justering i Power Fx. Redigeringstidsfel rapporteras eftersom funktioner som inte stöds påträffas. Detta är en av anledningarna till att reguljära uttryck och alternativ måste vara en redigeringstidskonstant och inte dynamisk (till exempel i en variabel).

Anmärkning

Power Apps använder en tidigare version av reguljära Power Fx-uttryck som har färre begränsningar men också färre funktioner. MatchOptions.DotAll och MatchOptions.FreeSpacing är inte tillgängliga och definitionerna för Match. E-post och Match. Bindestreck är olika. Unicode-surrogatpar behandlas inte som ett enda tecken. MatchOptions.NumberedSubMatches är standardinställningen. Versionen av reguljära uttryck som beskrivs här kommer snart att vara tillgänglig i Power Apps, under en "Power Fx V1.0-kompatibilitetsväxel".

Här följer några grundläggande element i reguljära uttryck som skapar komplexitet vid parsning av ett tal.

Egenskap Example Beskrivning
Fördefinierad teckenklass \d Det här reguljära uttrycket matchar ett enda tal, till exempel 1. En teckenklass matchar en uppsättning tecken och \d matchar standardsiffrorna 0 till 9 och även siffror som definieras i Unicode-teckenkategorin "Nd". Det finns teckenklasser för bokstäver och siffror med \w och blanksteg, inklusive nya streck med \s. Det finns också inverterade teckenklasser som är versaler: \D matchar allt som inte gör det \d .
En eller flera \d+ Det här reguljära uttrycket matchar ett eller flera tal, till exempel 123. En + efter ett element säger "en eller flera" av det sista elementet.
Noll eller ett \+?\d Det här reguljära uttrycket matchar ett valfritt + tecken följt av en eller flera tal, till exempel +123 samt bara 123. Efter ? ett element står det "det här är valfritt, det kan inträffa noll eller en gång". Har + ett omvänt snedstreck före det för att särskilja det som ett literaltecken i stället för "en eller flera" användning.
Gruppering och växling (-|\+)?\d+ Det här reguljära uttrycket matchar antingen ett + tecken eller ett -, om du vill, och sedan en serie tal, till exempel -123, +123och 123. Vi introducerar två begrepp här som ofta används tillsammans. Först har vi parentesen som grupperar som en uppsättning element tillsammans, för ? att agera på. För det andra har | vi som säger "antingen det ena eller det andra".
Anpassad teckenklass (-|\+)?\d+[eE][\-\+]?\d+ Det här reguljära uttrycket lägger till en exponent i mixen med två teckenklasser som matchar +123e-12. En teckenklass är som | växling som ger en "matcha en av dessa saker" i en mer kompakt form. Precis som med +, - har särskild betydelse i reguljära uttrycksteckenklasser så vi måste undvika det.
Noll eller mer (-|\+)?\d+\.?\d*[eE][\-\+]?\d+ Det här reguljära uttrycket lägger till decimaltecknet efter heltalsdelen av talet, till exempel -123.456e-89 eller -123.E+32. Efter \d decimaltecknet har en * kvantifierare som säger "noll eller fler gånger" för decimalsiffror efter .
Samla in grupper (?&lt;number&gt;(-|\+)?\d+\.?\d*)[eE](?&lt;exponent&gt;[\-\+]?\d+) Slutligen lägger vi till insamlingsgrupper för number och exponent. Ett reguljärt uttryck kan inte bara matcha hela strängen, det kan också extrahera delar för användning i dina formler, i det här fallet delen före e (eller E) och delen efter.

De här exemplen ger bara en liten smak av vad reguljära uttryck kan göra. De används ofta för att verifiera ID-nummer, e-postadresser, telefonnummer, datum och tider och för att extrahera information från alla typer av textfiler. Fortsätt din resa genom att läsa reguljära uttryck i Power Fx, experimentera och använda webben för att lära dig mer.

Match Alternativ

Ändra beteendet för dessa funktioner genom att ange ett eller flera alternativ som du kombinerar med strängsammanfogningsoperatorn (&).

MatchOptions-uppräkning 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 i Power Apps. Mönstret matchar hela textsträngen 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, och IsMatch utanför Power Apps. Mönstret måste finnas någonstans i texten, men behöver inte inleda eller avsluta den. Ändrar inte det reguljära uttrycket.
MatchOptions.DotAll Ändrar beteendet för operatorn . (punkt) så att den matchar alla tecken, inklusive nya radtecken. Inte tillgängligt i Power Apps. Ändrar inte det reguljära uttrycket. Det här alternativet motsvarar standardmodifieraren "s" för reguljära uttryck.
MatchOptions.EndsWith Mönstret måste matcha slutet på textsträngen. Lägger till $ i slutet av det reguljära uttrycket.
MatchOptions.FreeSpacing Blankstegstecken, inklusive nya streck, ignoreras i det reguljära uttrycket. Slutkommentarer som börjar med en # ignoreras. Inte tillgängligt i Power Apps. Ändrar bara syntaxen för reguljära uttryck. Det här alternativet motsvarar standardmodifieraren "x" för reguljära uttryck.
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 Ändrar beteendet ^ för och $ så att det matchar i slutet av en rad. Ändrar inte det reguljära uttrycket. Det här alternativet motsvarar standard "m"-modifieraren för reguljära uttryck.
MatchOptions.NumberedSubMatches Namngivna avbildningar är att föredra eftersom de är lättare att förstå och underhålla. Prestanda förbättras också eftersom onödiga avbildningar inte behålls. Men för äldre reguljära uttryck behandlar varje uppsättning parenteser som en numrerad avbildning som ingår i tabellen SubMatches i resultatet. Standard i Power Apps. Ändrar inte det reguljära uttrycket. Namngivna avbildningar är inaktiverade och \1 formateringsreferenser är aktiverade.

Att använda MatchAll är detsamma som att använda standardmodifieraren "g" för reguljära 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 Match uppräkningen definierar eller ger ett reguljärt uttryck. Mönstret måste vara en konstant formel utan variabler, datakällor eller andra dynamiska referenser som ändras när appen körs. Observera att formeln måste uttryckas som "Match. PredefinedPattern" t.ex. Match. E-post
  • Alternativ – Valfritt. En textsträngskombination av uppräkningsvärden i MatchOptions. Som standard används MatchOptions.Complete. Alternativen måste vara en konstant formel utan variabler, datakällor eller andra dynamiska referenser som ändras när appen körs.

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 Match uppräkningen 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. Alternativen måste vara en konstant formel utan variabler, datakällor eller andra dynamiska referenser som ändras när appen körs.

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 Match uppräkningen definierar eller ger ett reguljärt uttryck. Mönstret måste vara en konstant formel utan 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. Alternativen måste vara en konstant formel utan variabler, datakällor eller andra dynamiska referenser som ändras när appen körs.

IsMatch Exempel

Vanliga tecken

Anta att din app har en textinmatningskontrollmed namnet TextInput1. Användarna anger värden i den här kontrollen för att lagra dem i en databas.

Användare 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", Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit ) Matchar ett socialförsäkringsnummer i USA sann
IsMatch( "joan@contoso.com", Match.Email ) Matchar en e-postadress sann
IsMatch( "123.456", Match.MultipleDigits & Match.Period & Match.OptionalDigits ) Matchar en sekvens av siffror, en punkt och sedan noll eller flera siffror. sann
IsMatch( "123", Match.MultipleDigits & Match.Period & Match.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})" ) Validerar ett starkt lösenord som måste innehålla åtta, nio eller tio tecken, minst en siffra och minst ett alfabetiskt tecken. Strängen får inte innehålla 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. {
e-post: "bob.jones@contoso.com",
FullMatch: "<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",
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",
StartMatch: 1
}

Låt oss detaljgranska i det förra exemplet. Om du vill konvertera den här strängen till ett datum-/tidsvärde med hjälp av funktionen Tid måste du skicka in de namngivna delmatchningarna individuellt. Det gör du genom att använda funktionen Med som körs 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. {
FullMatch: "The",
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. 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. MatchAll med IgnoreCase.
MatchAll( pangram, "\b\wo\w\b" ) Söker efter alla tre bokstäver med ett "o"-ord i mitten. "brun" utesluts eftersom det inte är ett ord med tre bokstäver och därför inte matchar "\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". {
mellan: "hoppar över lata",
FullMatch: "räv hoppar över den lata hunden",
StartMatch: 17
}

Så här ser du resultatet av MatchAll i ett galleri:

  1. Infoga en tom lodrät gallerikontroll på en tom skärm.

  2. Ange galleriets objektegenskap 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. Om du vill se alla ord på en skärm ändrar du storlek på galleriets mall och etikettkontrollen.

    Textegenskap.