De functies IsMatch, Match en MatchAll

Van toepassing op: Canvas-apps Modelgestuurde apps 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 voor de eerste overeenkomst die wordt gevonden en MatchAll retourneert een tabel met records voor elke gevonden overeenkomst. De record of records bevatten:

Column Type Omschrijving
benoemde subovereenkomst of subovereenkomsten 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.
FullMatch Text Alle teksttekenreeksen die overeenkomen.
StartMatch Getal De beginpositie van de overeenkomst in de invoerteksttekenreeks. Het eerste teken van de tekenreeks retourneert 1.
SubMatches 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 zoekt naar een teksttekenreeks die volledig overeenkomt (Complete MatchOption), terwijl Match en MatchAll naar een willekeurige overeenkomst ergens in de teksttekenreeks zoeken (Contains MatchOption). Gebruik naar wens Complete, Contains, BeginsWith of EndsWith voor uw scenario.

IsMatch retourneert true als de teksttekenreeks overeenkomt met het patroon of false als dat niet het geval is. Match retourneert leeg als er geen overeenkomst wordt gevonden die kan worden getest met de functie IsBlank. MatchAll retourneert een lege tabel als er geen overeenkomst wordt 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
Any Komt overeen met een willekeurig teken. .
Comma Komt overeen met een komma. ,
Digit Komt overeen met één cijfer ("0" tot en met "9"). \d
Email Komt overeen met een e-mailadres dat een apenstaartje ("@") en een domeinnaam met een punt (".") bevat .+\@.+\\.[^\\.]{2,}
Hyphen Komt overeen met een afbreekstreepje. \-
LeftParen Komt overeen met een haakje openen "(". \(
Letter Komt overeen met een letter. \p{L}
MultipleDigits Komt overeen met een of meer cijfers. \d+
MultipleLetters Komt overeen met een of meer letters. \p{L}+
MultipleNonSpaces Komt overeen met een of meer tekens die geen witruimte (geen spatie, tab of nieuwe regel) toevoegen. \S+
MultipleSpaces Komt overeen met een of meer tekens die witruimte (spatie, tab of nieuwe regel) toevoegen. \s+
NonSpace Komt overeen met één teken dat geen witruimte toevoegt. \S
OptionalDigits Komt overeen met nul, een of meer cijfers. \d*
OptionalLetters Komt overeen met nul, een of meer letters. \p{L}*
OptionalNonSpaces Komt overeen met nul, een of meer tekens die geen witruimte toevoegen. \S*
OptionalSpaces Komt overeen met nul, een of meer tekens die witruimte toevoegen. \s*
Period Komt overeen met een punt ("."). \.
RightParen Komt overeen met een haakje sluiten ")". \)
Space Komt overeen met een teken dat witruimte toevoegt. \s
Tabblad 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.BeginsWith Het patroon moet overeenkomen vanaf het begin van de tekst. Voegt een ^ toe aan het begin van de reguliere expressie.
MatchOptions.Complete 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.Contains 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.IgnoreCase 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.Multiline 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( Text, Pattern [, Options ] )

  • Text: vereist. De teksttekenreeks die moet worden getest.
  • Pattern: vereist. 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. Pattern moet een constante formule zijn zonder variabelen, gegevensbronnen of andere dynamische verwijzingen die veranderen terwijl de app wordt uitgevoerd.
  • Options: optioneel. Een teksttekenreekscombinatie van vaste-tekstwaarden voor MatchOptions. Standaard wordt MatchOptions.Complete gebruikt.

Match( Text, Pattern [, Options ] )

  • Text: vereist. De teksttekenreeks die overeen moet komen.
  • Pattern: vereist. 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. Pattern moet een constante formule zijn zonder variabelen, gegevensbronnen of andere dynamische verwijzingen die veranderen terwijl de app wordt uitgevoerd.
  • Options: optioneel. Een teksttekenreekscombinatie van vaste-tekstwaarden voor MatchOptions. Standaard wordt MatchOptions.Contains gebruikt.

MatchAll( Text, Pattern [, Options ] )

  • Text: vereist. De teksttekenreeks die overeen moet komen.
  • Pattern: vereist. 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. Pattern moet een constante formule zijn zonder variabelen, gegevensbronnen of andere dynamische verwijzingen die veranderen terwijl de app wordt uitgevoerd.
  • Options: 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". true
IsMatch( TextInput1.Text, "Good bye" ) Test of de invoer van de gebruiker exact overeenkomt met de tekenreeks "Good bye". false
IsMatch( TextInput1.Text, "hello", Contains ) Test of de invoer van de gebruiker het woord "hello" (hoofdlettergevoelig) bevat. false
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Test of de invoer van de gebruiker het woord "hello" (niet-hoofdlettergevoelig) bevat. true

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 true
IsMatch( "joan@contoso.com", Email ) Komt overeen met een e-mailadres true
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) Komt overeen met een opeenvolging van cijfers, een punt en vervolgens nul of meer cijfers. true
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. false

Reguliere expressies

Formule Beschrijving Resultaat
IsMatch( "986", "\d+" ) Komt overeen met een geheel getal dat groter is dan nul. true
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. true
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. true
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. true
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. false
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. false

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.