Share via


De functies IsMatch, Match en MatchAll

Van toepassing op: Canvas-apps Modelgestuurde apps Power Pages Power Platform CLI

Deze functies testen of er een overeenkomsten zijn of extraheren delen van een teksttekenreeks op basis van een patroon.

Beschrijving

De functie IsMatch test of een teksttekenreeks overeenkomt met een patroon dat kan bestaan uit gewone tekens, vooraf gedefinieerde patronen of een reguliere expressie. De functies Match en MatchAll retourneren de gevonden overeenkomsten, inclusief subovereenkomsten.

Gebruik IsMatch om te valideren wat een gebruiker in het besturingselement Text input heeft getypt. U kunt bijvoorbeeld controleren of de gebruiker een geldig e-mailadres heeft ingevoerd voordat het resultaat in uw gegevensbron wordt opgeslagen. Als de invoer niet met uw criteria overeenkomt, voegt u andere besturingselementen toe die de gebruiker vragen om de gegevens te corrigeren.

Gebruik Match om de eerste teksttekenreeks te extraheren die overeenkomt met een patroon en gebruik MatchAll om alle overeenkomende teksttekenreeksen te extraheren. U kunt ook subovereenkomsten extraheren om complexe tekenreeksen te parseren.

Match retourneert een record met informatie over de eerste gevonden match en MatchAll retourneert een tabel met records voor elke gevonden match. De record of records bevatten:

Column Type Omschrijving
benoemde sub-match of sub-matches Sms verzenden Elke benoemde subovereenkomst heeft zijn eigen kolom. Maak een benoemde subovereenkomst met (?<naam>...) in de reguliere expressie. Als een benoemde subovereenkomst dezelfde naam heeft als een van de vooraf gedefinieerde kolommen (hieronder), heeft de subovereenkomst voorrang en wordt er een waarschuwing gegenereerd. Als u deze waarschuwing wilt voorkomen, wijzigt u de naam van de subovereenkomst.
VolledigeMatch Text Alle teksttekenreeksen die overeenkomen.
StartMatch Getal De beginpositie van de overeenkomst in de invoerteksttekenreeks. Het eerste teken van de tekenreeks retourneert 1.
Subwedstrijden Tabel met één kolom tekst (kolom Value) De tabel met benoemde en naamloze subovereenkomsten in de volgorde waarin ze in de reguliere expressie worden weergegeven. Over het algemeen is het gemakkelijker om met benoemde subovereenkomsten te werken en het gebruik ervan wordt aanbevolen. Gebruik de functie ForAll of de functies Last( FirstN( ... ) ) om met een afzonderlijke subovereenkomst te werken. Als er geen subovereenkomsten zijn gedefinieerd in de reguliere expressie, is deze tabel aanwezig maar leeg.

Deze functies ondersteunen MatchOptions. Standaard:

  • Deze functies zoeken naar hoofdlettergevoelige overeenkomsten. Gebruik MatchOptions.IgnoreCase om niet-hoofdlettergevoelige overeenkomsten te zoeken.
  • IsMatch komt overeen met de gehele tekstreeks (Complete MatchOption), terwijl Match en MatchAll zoeken naar een overeenkomst ergens in de tekstreeks (Contains MatchOption). Gebruik naar wens Complete, Contains, BeginsWith of EndsWith voor uw scenario.

IsMatch retourneert true als de tekstreeks overeenkomt met het patroon of false als dit niet het geval is. Match retourneert blank als er geen match is gevonden die kan worden getest met de IsBlank functie. MatchAll retourneert een lege tabel als er geen overeenkomst is gevonden die kan worden getest met de functie IsEmpty .

Als u MatchAll gebruikt, kunt u overwegen om de teksttekenreeks te splitsen met de functie Split, omdat deze functie eenvoudiger te gebruiken is en sneller is.

Patronen

De sleutel tot het gebruik van deze functies ligt in het beschrijven van het patroon dat overeen moet komen. U beschrijft het patroon in een teksttekenreeks als een combinatie van:

  • Gewone tekens, zoals "abc" of "123".
  • Vooraf gedefinieerde patronen, zoals Letter, MultipleDigits of Email. (De vaste-tekstwaarde van Match definieert deze patronen.)
  • Reguliere-expressiecodes, zoals "\d+\s+\d+" of "[a-z]+".

Combineer deze elementen door de samenvoegingsoperator voor tekenreeksen & te gebruiken. "abc" & Digit & "\s+" is bijvoorbeeld een geldig patroon waarmee naar de tekens "a", "b" en "c", gevolgd door een cijfer van 0 tot 9, gevolgd door minimaal één spatie wordt gezocht.

Gewone tekens

Het eenvoudigste patroon is een opeenvolging van gewone tekens die precies overeen moeten komen.

Als dit patroon bijvoorbeeld wordt gebruikt met de functie IsMatch, komt de string "Hallo" exact overeen met het patroon "Hallo". Niet meer en niet minder. De tekenreeks "hallo!" komt niet overeen met het patroon omdat er een uitroepteken aan het einde staat en de kleine letter "h" is gebruikt. (Zie MatchOptions voor manieren om dit gedrag te wijzigen.)

In de patroontaal zijn bepaalde tekens voor speciale doeleinden gereserveerd. Als u deze tekens wilt gebruiken, moet u een \ (backslash) voor het teken plaatsen om aan te geven dat het teken letterlijk moet worden genomen of een van de vooraf gedefinieerde patronen gebruiken die later in dit onderwerp worden beschreven. Deze tabel bevat de speciale tekens:

Speciaal teken Beschrijving
. stip of punt
? vraagteken
* sterretje
+ plus
( ) haakjes
[ ] vierkante haakjes
{ } accolades
^ caret
$ dollarteken
| verticale streep of sluisteken
\ backslash

U kunt bijvoorbeeld "Hallo?" vinden door het patroon "Hallo\?" te gebruiken met een backslash voor het vraagteken.

Vooraf gedefinieerde patronen

Vooraf gedefinieerde patronen bieden een eenvoudige manier om een reeks tekens of een opeenvolging van meerdere tekens te vinden. Gebruik de samenvoegingsoperator voor tekenreeksen & om uw eigen teksttekenreeks te combineren met leden van de enum Match:

vaste-tekstwaarden voor Match Beschrijving Reguliere expressie
Elk Komt overeen met een willekeurig teken. .
Komma Komt overeen met een komma. ,
Cijfer Komt overeen met één cijfer ("0" tot en met "9"). \d
e-mail Komt overeen met een e-mailadres dat een apenstaartje ("@") en een domeinnaam met een punt (".") bevat .+\@.+\\.[^\\.]{2,}
Koppelteken Komt overeen met een afbreekstreepje. \-
LinkerParen Komt overeen met een haakje openen "(". \(
Brief Komt overeen met een letter. \p{L}
Meervoudige cijfers Komt overeen met een of meer cijfers. \d+
Meervoudige letters Komt overeen met een of meer letters. \p{L}+
MeervoudigeNiet-Spaces Komt overeen met een of meer tekens die geen witruimte (geen spatie, tab of nieuwe regel) toevoegen. \S+
Meervoudigeruimtes Komt overeen met een of meer tekens die witruimte (spatie, tab of nieuwe regel) toevoegen. \s+
Niet-ruimte Komt overeen met één teken dat geen witruimte toevoegt. \S
Optionele cijfers Komt overeen met nul, een of meer cijfers. \d*
Optionele letters Komt overeen met nul, een of meer letters. \p{L}*
OptioneleNiet-Spaces Komt overeen met nul, een of meer tekens die geen witruimte toevoegen. \S*
OptioneleSpaties Komt overeen met nul, een of meer tekens die witruimte toevoegen. \s*
Periode Komt overeen met een punt ("."). \.
RechterParen Komt overeen met een haakje sluiten ")". \)
Ruimte Komt overeen met een teken dat witruimte toevoegt. \s
Tab Komt overeen met een tabteken. \t

Het patroon "A" & MultipleDigits komt bijvoorbeeld overeen met de letter "A", gevolgd door een of meer cijfers.

Reguliere expressies

Het patroon dat deze functies gebruiken is een reguliere expressie. De gewone tekens en vooraf gedefinieerde patronen die eerder in dit onderwerp worden beschreven, helpen bij het opbouwen van reguliere expressies.

Reguliere expressies zijn heel krachtig en beschikbaar in veel programmeertalen. Ze worden voor veel verschillende doeleinden gebruikt. Ze kunnen er ook vaak uitzien als een willekeurige reeks leestekens. In dit artikel kunnen niet alle aspecten van reguliere expressies worden beschreven, maar er is op internet een schat aan informatie en zelfstudies en hulpmiddelen beschikbaar.

Reguliere expressies zijn er in verschillende dialecten en Power Apps maakt gebruik van een variant van het JavaScript-dialect. Zie syntaxis van reguliere expressies voor een inleiding tot de syntaxis. Benoemde subovereenkomsten (ook wel benoemde capture-groepen genoemd) worden ondersteund:

  • Benoemde subovereenkomsten: (?<naam> ...)
  • Benoemde terugverwijzingen: \k<naam>

In de tabel van vaste-tekstwaarden voor Match eerder in dit onderwerp wordt elke vaste-tekstwaarde in dezelfde rij weergegeven als de corresponderende reguliere expressie.

Match-opties

U kunt het gedrag van deze functies wijzigen door een of meer opties op te geven. U kunt deze combineren door de samenvoegingsoperator voor tekenreeksen (&) te gebruiken.

Vaste-tekstwaarde voor MatchOptions Omschrijving Effect op een reguliere expressie
MatchOptions.Begint met Het patroon moet overeenkomen vanaf het begin van de tekst. Voegt een ^ toe aan het begin van de reguliere expressie.
MatchOptions.Volledig Standaard voor IsMatch. Het patroon moet met de volledige teksttekenreeks overeenkomen, vanaf begin tot einde. Voegt een ^ aan het begin en een $ aan het einde van de reguliere expressie toe.
MatchOptions.Bevat Standaard voor Match en MatchAll. Het patroon moet ergens in de tekst worden weergegeven, maar hoeft niet aan het begin of einde te staan. Wijzigt de reguliere expressie niet.
MatchOptions.EndsWith Het patroon moet overeenkomen met het einde van de teksttekenreeks. Voegt een $ toe aan het einde van de reguliere expressie.
MatchOptions.NegeerCase Maakt geen verschil tussen hoofdletters en kleine letters. De overeenkomst is standaard hoofdlettergevoelig. Wijzigt de reguliere expressie niet. Deze optie is het equivalent van de standaard "i"-modificator voor reguliere expressies.
MatchOptions.Meerdere regels Komt overeen met meerdere regels. Wijzigt de reguliere expressie niet. Deze optie is het equivalent van de standaard "m"-modificator voor reguliere expressies.

Het gebruik van MatchAll is equivalent aan het gebruik van de standaard "g"-modificator voor reguliere expressies.

Syntaxis

IsMatch( Tekst, Patroon [, Opties ] )

  • Tekst – Verplicht. De teksttekenreeks die moet worden getest.
  • Patroon – Verplicht. Het patroon dat moet worden getest als teksttekenreeks. Voeg vooraf gedefinieerde patronen die de vaste-tekstwaarde voor Match definieert samen, of geef een reguliere expressie op. Patroon moet een constante formule zijn zonder variabelen, gegevensbronnen of andere dynamische verwijzingen die veranderen terwijl de app wordt uitgevoerd.
  • Opties – Optioneel. Een teksttekenreekscombinatie van vaste-tekstwaarden voor MatchOptions. Standaard wordt MatchOptions.Complete gebruikt.

Match( Tekst, Patroon [, Opties ] )

  • Tekst – Verplicht. De teksttekenreeks die overeen moet komen.
  • Patroon – Verplicht. Het patroon dat overeen moet komen als teksttekenreeks. Voeg vooraf gedefinieerde patronen die de vaste-tekstwaarde voor Match definieert samen, of geef een reguliere expressie op. Patroon moet een constante formule zijn zonder variabelen, gegevensbronnen of andere dynamische verwijzingen die veranderen terwijl de app wordt uitgevoerd.
  • Opties – Optioneel. Een teksttekenreekscombinatie van vaste-tekstwaarden voor MatchOptions. Standaard wordt MatchOptions.Contains gebruikt.

MatchAll( Tekst, Patroon [, Opties ] )

  • Tekst – Verplicht. De teksttekenreeks die overeen moet komen.
  • Patroon – Verplicht. Het patroon dat overeen moet komen als teksttekenreeks. Voeg vooraf gedefinieerde patronen die de vaste-tekstwaarde voor Match definieert samen, of geef een reguliere expressie op. Patroon moet een constante formule zijn zonder variabelen, gegevensbronnen of andere dynamische verwijzingen die veranderen terwijl de app wordt uitgevoerd.
  • Opties – Optioneel. Een teksttekenreekscombinatie van vaste-tekstwaarden voor MatchOptions. Standaard wordt MatchOptions.Contains gebruikt.

Voorbeelden van IsMatch

Gewone tekens

Stel dat uw app een besturingselement Text input bevat met de naam TextInput1. De gebruiker voert in dit besturingselement waarden in die in een database moeten worden opgeslagen.

De gebruiker typt Hello world in TextInput1.

Formule Beschrijving Resultaat
IsMatch( TextInput1.Text, "Hello world" ) Test of de invoer van de gebruiker exact overeenkomt met de tekenreeks "Hello world". WAAR
IsMatch( TextInput1.Text, "Good bye" ) Test of de invoer van de gebruiker exact overeenkomt met de tekenreeks "Good bye". vals
IsMatch( TextInput1.Text, "hello", Contains ) Test of de invoer van de gebruiker het woord "hello" (hoofdlettergevoelig) bevat. vals
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Test of de invoer van de gebruiker het woord "hello" (niet-hoofdlettergevoelig) bevat. WAAR

Vooraf gedefinieerde patronen

Formule Beschrijving Resultaat
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) Komt overeen met een sociaal-fiscaal nummer van de Verenigde Staten WAAR
IsMatch( "joan@contoso.com", Email ) Komt overeen met een e-mailadres WAAR
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) Komt overeen met een opeenvolging van cijfers, een punt en vervolgens nul of meer cijfers. WAAR
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) Komt overeen met een opeenvolging van cijfers, een punt en vervolgens nul of meer cijfers. Er staat geen punt in de tekst. Daarom is er geen overeenkomst met dit patroon. vals

Reguliere expressies

Formule Beschrijving Resultaat
IsMatch( "986", "\d+" ) Komt overeen met een geheel getal dat groter is dan nul. WAAR
IsMatch( "1.02", "\d+(\.\d\d)?" ) Komt overeen met een positief bedrag. Als de invoer een decimaalteken bevat, moet de invoer ook twee numerieke tekens na het decimaalteken bevatten. 3.00 is bijvoorbeeld geldig, maar 3.1 is dat niet. WAAR
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) Komt overeen met een positief of negatief bedrag. Als de invoer een decimaalteken bevat, moet de invoer ook twee numerieke tekens na het decimaalteken bevatten. WAAR
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) Komt overeen met een sociaal-fiscaal nummer van de Verenigde Staten. Valideert de indeling, het type en de lengte van het opgegeven invoerveld. De tekenreeks die overeen moet komen, moet bestaan uit drie numerieke tekens met daar achter een streepje, daarna twee numerieke tekens gevolgd door een streepje en vervolgens vier numerieke tekens. WAAR
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) Hetzelfde als het vorige voorbeeld, maar een van de afbreekstreepjes in de invoer valt buiten het bereik. vals
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) Valideert een sterk wachtwoord dat uit acht, negen of tien tekens moet bestaan en daarnaast minimaal één cijfer en minimaal een letter moet bevatten. De tekenreeks mag geen speciale tekens bevatten. vals

Voorbeelden van Match en MatchAll

Formule Beschrijving Resultaat
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" Extraheert alleen het e-mailgedeelte van de contactgegevens. {
email: "bob.jones@contoso.com",
FullMatch: "<bob.jones@contoso.com>",
SubMatches: [ "bob.jones@contoso.com" ],
StartMatch: 11
}
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" Extraheert alleen het e-mailgedeelte van de contactgegevens. Er is geen geldig adres gevonden (er is geen @-teken), dus de functie retourneert blank. leeg
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) Extraheert de taal, het script en de regio van de taalcode die de functie Language retourneert. Deze resultaten weerspiegelen de Verenigde Staten; zie de documentatie over de functie Language voor meer voorbeelden. De operator (?: groepeert tekens zonder een nieuwe subovereenkomst te maken. {
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)?" ) Extraheert de uren, minuten en seconden uit een ISO 8601-duurwaarde. De geëxtraheerde nummers staan nog steeds in een teksttekenreeks; gebruik de functie Value om ze om te zetten naar een getal voordat er wiskundige bewerkingen op worden uitgevoerd. {
hours: "2",
minutes: "1",
seconds: "39",
FullMatch: "PT2H1M39S",
SubMatches:["2","1","39"],
StartMatch: 1
}

Laten we dat laatste voorbeeld nader bekijken. Als u deze tekenreeks wilt converteren naar een datum-/tijdwaarde met de functie Time, moet u de benoemde subovereenkomsten afzonderlijk doorgeven. U kunt dit doen met de functie With die wordt uitgevoerd op de record die Match retourneert:

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

Voeg voor deze voorbeelden een besturingselement Button toe, stel de bijbehorende eigenschap OnSelect in op deze formule en selecteer vervolgens de knop:

Set( pangram, "The quick brown fox jumps over the lazy dog." )
Formule Beschrijving Resultaat
Match( pangram, "THE", IgnoreCase ) Zoek alle overeenkomsten van "THE" in de teksttekenreeks die de variabele pangram bevat. De tekenreeks bevat twee overeenkomsten, maar alleen de eerste wordt geretourneerd omdat u Match gebruikt en niet MatchAll. De kolom SubMatches is leeg omdat er geen subovereenkomsten zijn gedefinieerd. {
FullMatch: "The",
SubMatches: [ ],
StartMatch: 32
}
MatchAll( pangram, "the" ) Zoek alle overeenkomsten van "the" in de teksttekenreeks die de variabele pangram bevat. De test is hoofdlettergevoelig, dus wordt alleen de tweede instantie van "the" gevonden. De kolom SubMatches is leeg omdat er geen subovereenkomsten zijn gedefinieerd. MatchAll voor pangram.
MatchAll( pangram, "the", IgnoreCase ) Zoek alle overeenkomsten van "the" in de teksttekenreeks die de variabele pangram bevat. In dit geval is de test niet hoofdlettergevoelig, dus beide instanties van het woord worden gevonden. De kolom SubMatches is leeg omdat er geen subovereenkomsten zijn gedefinieerd. MatchAll met IgnoreCase.
MatchAll( pangram, "\b\wo\w\b" ) Vind alle woorden van drie letters met een "o" in het midden. Merk op dat "brown" is uitgesloten omdat het geen woord van drie letters is en daarom niet overeenkomt met "\b" (woordgrens). MatchAll voor pangram met b, wo, w en b.
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) Komt overeen met alle tekens tussen "fox" en "dog". {
tussen: "jumps over the lazy",
FullMatch: "fox jumps over the lazy dog",
SubMatches: [ "jumps over the lazy" ],
StartMatch: 17
}

De resultaten van MatchAll in een galerie bekijken:

  1. Voeg in een leeg scherm een leeg verticaal besturingselement Gallery in.

  2. Stel de eigenschap Items van de galerie in op MatchAll (pangram, "\w+" ) of MatchAll(pangram, MultipleLetters ).

    Galerij met items.

  3. Selecteer "Een item toevoegen vanaf het tabblad Insert" in het midden van het besturingselement Gallery om de sjabloon van de galerie te selecteren.

  4. Voeg een besturingselement Label toe aan de sjabloon van de galerie.

  5. Stel de eigenschap Text van het label in op ThisItem.FullMatch.

    De galerie wordt gevuld met elk woord in onze voorbeeldtekst. Wijzig het formaat van de sjabloon van de galerie en het besturingselement Label om alle woorden op één scherm weer te geven.

    Eigenschap Text.