Funkcije IsMatch, Match in MatchAll
Velja za: Aplikacije Canvas Aplikacije, ki temeljijo na modelu Power Pages Power Platform CLI
Preveri ujemanje ali izvleče dele besedilnega niza glede na vzorec.
Opis
Funkcija IsMatch preveri, ali se besedilni niz ujema z vzorcem, ki lahko vsebuje navadne znake, vnaprej določene vzorce ali regularni izraz. Funkciji Match in MatchAll vrneta ujemanja, vključno s podujemanji.
S funkcijo IsMatch preverite, kaj je uporabnik vnesel v kontrolnik Text input. Lahko na primer preverite, ali je uporabnik vnesel veljaven e-poštni naslov, preden je rezultat shranjen v vaš vir podatkov. Če vnos ne ustreza vašim pogojem, dodajte druge kontrolnike, ki pozovejo uporabnika, naj popravi vnos.
S funkcijo Match izvlecite prvi besedilni nizi, ki se ujema z vzorcem, s funkcijo MatchAll pa izvlecite vse besedilne nize, ki se ujemajo. Izvlečete lahko tudi podujemanja in razčlenite sestavljene nize.
Match vrne zapis informacij za prvo najdeno ujemanje, MatchAll vrne tabelo zapisov za vsako najdeno ujemanje. Zapis ali zapisi vsebujejo:
Column | Vnesi | Description |
---|---|---|
imenovano pod-ujemanje ali pod-ujemanja | SMS-a | Vsako poimenovano podujemanje ima svoj stolpec. Ustvarite poimenovano podujemanje, pri čemer v regularnem izrazu uporabite (?<ime>...). Če ima poimenovano podujemanje enako ime kot eden od vnaprej določenih stolpcev (spodaj), ima podujemanje prednost in ustvari se opozorilo. Če se želite izogniti temu opozorilu, preimenujte podujemanje. |
FullMatch | Besedilo | Celoten besedilni niz, ki se ujema. |
StartMatch | Število | Začetni položaj ujemanja v vhodnem besedilnem nizu. Prvi znak niza vrne vrednost 1. |
SubMatches | Tabela z besedilom z enim stolpcem (stolpec Vrednost) | Tabela poimenovanih in neimenovanih podujemanj v vrstnem redu, v katerem so prikazana v regularnem izrazu. Na splošno je lažje delati s poimenovanimi podujemanji in jih zato tudi priporočamo. Uporabite funkcijo ForAll ali funkcije Last( FirstN( ... ) ) za delo s posameznim podujemanjem. Če v regularnem izrazu podujemanja niso določena, bo ta tabela prikazana, vendar bo prazna. |
Te funkcije podpirajo MatchOptions. Privzeto:
- Te funkcije izvedejo ujemanje, ki razlikuje med velikimi in malimi črkami. Uporabite MatchOptions.IgnoreCase za izvedbo iskanj, ki ne razlikujejo med velikimi in malimi črkami.
- IsMatch se ujema s celotnim besedilnim nizom (Complete MatchOption), medtem ko Match in MatchAll iskanje ujemanja kjer koli v besedilnem nizu (Vsebuje MatchOption). Uporabite Complete, Contains, BeginsWith ali EndsWith, kot ustreza vašemu primeru.
IsMatch vrne true če se besedilni niz ujema z vzorcem ali false če se ne 't. Match vrne prazno če ni najdeno ujemanje, ki bi ga bilo mogoče preizkusiti z IsBlank funkcijo. MatchAll vrne prazno tabelo, če ni ujemanja, ki bi ga bilo mogoče preizkusiti s funkcijo IsEmpty .
Če za razdelitev besedilnega niza uporabljate MatchAll, razmislite o uporabi funkcije Split, ki je enostavnejša za uporabo in hitrejša.
Vzorci
Pri uporabi teh funkcij je ključnega pomena opis vzorca za ujemanje. Vzorec opišete v besedilnem nizu kot kombinacijo:
- navadnih znakov, kot je "abc" ali "123".
- vnaprej določenih vzorcev, kot so Letter, MultipleDigits ali Email. (Te vzorce določa enumerator Match.)
- kod regularnega izraza, kot je "\d+\s+\d+" ali "[a-z]+".
Združite te elemente z uporabo operatorja združevanja nizov &. Na primer "abc" & Digit & "\s+" je veljaven vzorec, ki se ujema z znaki "a", "b" in "c", ki jim sledi številka od 0 do 9, ki ji sledi vsaj en presledek.
Navadni znaki
Najenostavnejši vzorec je zaporedje navadnih znakov, ki se morajo natančno ujemati.
Ko se na primer uporablja s funkcijo IsMatch, se niz »Hello« natančno ujema z vzorcem "Hello". Nič več in nič manj. Niz »hello!« se ne ujema z vzorcem zaradi klicaja na koncu in ker črka »h« ni velika črka. (Za načine za spreminjanje tega vedenja glejte MatchOptions.)
V jeziku vzorca so določeni znaki rezervirani za posebne namene. Če želite uporabiti te znake, pred znak dodajte znak, ki vključuje \ (poševnico nazaj), da označite, da je treba znak obravnavati dobesedno, ali uporabite enega od vnaprej določenih vzorcev, ki so opisani v nadaljevanju te teme. V tej tabeli so navedeni posebni znaki:
Posebni znak | Description |
---|---|
. | pika |
? | vprašaj |
* | zvezdica |
+ | plus |
( ) | oklepaji |
[ ] | oglati oklepaji |
{ } | zaviti oklepaji |
^ | strešica |
$ | znak za dolar |
| | navpična črta |
\ | poševnica nazaj |
Na primer, ali lahko najdete ujemanje za »Hello?« z uporabo vzorca "Hello\?" s poševnico nazaj pred vprašajem.
Vnaprej določeni vzorci
Vnaprej določeni vzorci zagotavljajo enostaven način za ujemanje kateregakoli nabora znakov ali zaporedja več znakov. Uporabite operator združevanja nizov & za kombiniranje lastnih besedilnih nizov s člani Match oštevilčenje:
Enumerator Match | Opis | Regularni izraz |
---|---|---|
katera koli | Ujema se s katerimkoli znakom. | . |
Vejica | Ujema se z vejico. | , |
Številka | Ujema se z eno številko (0 do 9). | \d |
E-pošta | Ujema se z e-poštnim naslovom, ki vsebuje simbol »afna« (»@«), in imenom domene, ki vsebuje piko (».«). | .+\@.+\\.[^\\.]{2,} |
Vezaj | Ujema se z vezajem. | \- |
LeftParen | Ujema se z levim oklepajem »(«. | \( |
Pismo | Ujema se s črko. | \p{L} |
MultipleDigits | Ujema se z eno ali več številkami. | \d+ |
Več črk | Ujema se z eno ali več črkami. | \p{L}+ |
MultipleNonSpaces | Ujema z enim ali več znaki, ki ne dodajajo praznega prostora (brez presledka, tabulatorja ali prehoda v novo vrstico). | \S+ |
MultipleSpaces | Ujema z enim ali več znaki, ki dodajo prazen prostor (presledek, tabulator ali prehod v novo vrstico). | \s+ |
NonSpace | Ujema z enim znakom, ki ne doda praznega prostora. | \S |
OptionalDigits | Ujema se z nič, eno ali več številkami. | \d* |
Izbirne črke | Ujema se z nič, eno ali več črkami. | \p{L}* |
OptionalNonSpaces | Ujema z nič, enim ali več znaki, ki ne dodajo praznega prostora. | \S* |
OptionalSpaces | Ujema z nič, enim ali več znaki, ki dodajo prazen prostor. | \s* |
Pika | Ujema se s piko (».«). | \. |
RightParen | Ujema se z desnim oklepajem »)«. | \) |
Vesolje | Ujema se z znakom, ki doda prazen prostor. | \s |
Tab | Ujema se s tabulatorjem. | \t |
Na primer, vzorec "A" in več števk se bo ujemalo s črko "A", ki ji sledi ena ali več števk.
Regularni izrazi
Vzorec, ki ga uporabljajo te funkcije, je regularni izraz. Navadni znaki in vnaprej določeni vzorci, ki so opisani zgoraj v tej temi, pomagajo pri ustvarjanju regularnih izrazov.
Regularni izrazi so zelo zmogljivi, na voljo so v številnih programskih jezikih in se uporabljajo za najrazličnejše namene. Pogosto pa so videti kot naključno zaporedje ločil. Ta članek ne opisuje vseh vidikov regularnih izrazov, vendar je v spletu na voljo veliko informacij, vadnic in orodij.
Regularni izrazi so na voljo v različnih dialektih; Power Apps uporablja različico dialekta JavaScript. Za uvod v sintakso glejte sintakso regularnih izrazov. Podprta so poimenovana podujemanja (včasih jih imenujemo poimenovane skupine za zajem):
- Poimenovana podujemanja: (?<ime> ...)
- Poimenovani povratni sklici: \k<ime>
V tabeli enumeratorjev Match zgoraj v tej temi se vsak enumerator prikaže v isti vrstici kot njegov ustrezen regularni izraz.
Možnosti ujemanja
Obnašanje teh funkcij lahko spremenite tako, da podate eno ali več možnosti, ki jih lahko kombinirate z uporabo operatorja za združevanje nizov ( &).
Enumerator MatchOptions | Description | Vpliv na regularni izraz |
---|---|---|
MatchOptions.BeginsWith | Vzorec se mora ujemati od začetka besedila. | Doda ^ na začetek regularnega izraza. |
MatchOptions.Complete | Privzeta vrednost za IsMatch. Vzorec se mora ujemati s celotnim nizom besedila, od začetka do konca. | Doda ^ na začetek in $ na konec regularnega izraza. |
MatchOptions.Contains | Privzeta vrednost za Match in MatchAll. Vzorec se mora pojaviti nekje v besedilu, vendar ne nujno na začetku ali koncu. | Ne spremeni regularnega izraza. |
MatchOptions.EndsWith | Vzorec se mora ujemati s koncem niza besedila. | Doda $ na konec regularnega izraza. |
MatchOptions.IgnoreCase | Velike in male črke obravnava kot enake. Ujemanje privzeto razlikuje med velikimi in malimi črkami. | Ne spremeni regularnega izraza. Ta možnost je enakovredna standardnemu modifikatorju »i« za regularne izraze. |
MatchOptions.Multiline | Poišče ujemanje v več vrsticah. | Ne spremeni regularnega izraza. Ta možnost je enakovredna standardnemu modifikatorju »m« za regularne izraze. |
Uporaba funkcije MatchAll je enakovredna uporabi standardnega modifikatorja »g« za regularne izraze.
Sintaksa
IsMatch ( Besedilo, Vzorec [, Možnosti ] )
- Besedilo – obvezno. Besedilni niz za preskus.
- Vzorec – Obvezno. Vzorec za preskus kot besedilni niz. Spojite vnaprej določene vzorce, ki jih določa enumerator Match ali vnesite regularni izraz. Vzorec mora biti stalna formula brez spremenljivk, podatkovnih virov ali drugih dinamičnih referenc, ki se spreminjajo med izvajanjem aplikacije.
- Možnosti – Neobvezno. Kombinacija besedilnega niza za vrednosti enumeratorja MatchOptions. Privzeto se uporablja MatchOptions.Complete.
Ujemanje ( Besedilo, Vzorec [, Možnosti ] )
- Besedilo – obvezno. Besedilni niz za ujemanje.
- Vzorec – Obvezno. Vzorec za ujemanje kot besedilni niz. Spojite vnaprej določene vzorce, ki jih določa enumerator Match ali vnesite regularni izraz. Vzorec mora biti stalna formula brez spremenljivk, podatkovnih virov ali drugih dinamičnih referenc, ki se spreminjajo med izvajanjem aplikacije.
- Možnosti – Neobvezno. Kombinacija besedilnega niza za vrednosti enumeratorja MatchOptions. Privzeto se uporablja MatchOptions.Contains.
MatchAll ( Besedilo, Vzorec [, Možnosti ] )
- Besedilo – obvezno. Besedilni niz za ujemanje.
- Vzorec – Obvezno. Vzorec za ujemanje kot besedilni niz. Spojite vnaprej določene vzorce, ki jih določa enumerator Match ali vnesite regularni izraz. Vzorec mora biti stalna formula brez spremenljivk, podatkovnih virov ali drugih dinamičnih referenc, ki se spreminjajo med izvajanjem aplikacije.
- Možnosti – Neobvezno. Kombinacija besedilnega niza za vrednosti enumeratorja MatchOptions. Privzeto se uporablja MatchOptions.Contains.
Primeri za IsMatch
Navadni znaki
Predstavljajte si, da vaša aplikacija vsebuje kontrolnik Text input z imenom TextInput1. Uporabnik v ta kontrolnik vnese vrednosti, ki bodo shranjene v zbirko podatkov.
Uporabnik vnese Hello world v kontrolnik TextInput1.
Formula | Opis | Rezultat |
---|---|---|
IsMatch( TextInput1.Text, "Hello world" ) |
Preskusi, ali se uporabnikov vnos natančno ujema z nizom »Hello world«. | res |
IsMatch( TextInput1.Text, "Good bye" ) |
Preskusi, ali se uporabnikov vnos natančno ujema z nizom »Good bye«. | lažno |
IsMatch( TextInput1.Text, "hello", Contains ) |
Preskusi, ali uporabnikov vnos vsebuje besedo »hello« (razlikuje med velikimi in malimi črkami). | lažno |
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) |
Preskusi, ali uporabnikov vnos vsebuje besedo »hello« (ne razlikuje med velikimi in malimi črkami). | res |
Vnaprej določeni vzorci
Formula | Opis | Rezultat |
---|---|---|
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) |
Poišče ujemanje za številko socialnega zavarovanja v ZDA | res |
IsMatch( "joan@contoso.com", Email ) |
Poišče ujemanje za e-poštni naslov | res |
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) |
Poišče ujemanje za zaporedje številk, pike in nato nič ali več številk. | res |
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) |
Poišče ujemanje za zaporedje številk, pike in nato nič ali več številk. Pika se ne prikaže v besedilu za ujemanje, zato se ta vzorec ne ujema. | lažno |
Regularni izrazi
Formula | Opis | Rezultat |
---|---|---|
IsMatch( "986", "\d+" ) |
Poišče ujemanje za celo število, večje od nič. | res |
IsMatch( "1.02", "\d+(\.\d\d)?" ) |
Poišče ujemanje za pozitivni znesek valute. Če vnos vsebuje decimalno vejico, mora vnos vsebovati tudi dva številska znaka za decimalno vejico. 3,00 je na primer veljavna vrednost, 3,1 pa ne. | res |
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) |
Poišče ujemanje za pozitivni ali negativni znesek valute. Če vnos vsebuje decimalno vejico, mora vnos vsebovati tudi dva številska znaka za decimalno vejico. | res |
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) |
Poišče ujemanje za številko socialnega zavarovanja v ZDA. Preveri veljavnost oblike zapisa, vrste in dolžine polja za vnos. Niz za ujemanje mora biti sestavljen iz treh številskih znakov, ki jima sledi vezaj, nato dveh številskih znakov, ki jima sledi vezaj, in nato še štirih številskih znakov. | res |
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) |
Enako kot v prejšnjem primeru, vendar eden od vezajev v vnosu ni na pravem mestu. | lažno |
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) |
Preveri veljavnost zapletenega gesla, ki mora vsebovati osem, devet ali deset znakov poleg vsaj ene številke in vsaj enega abecednega znaka. Niz ne sme vsebovati posebnih znakov. | lažno |
Primeri za Match in MatchAll
Formula | Opis | Rezultat |
---|---|---|
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" |
Izvleče samo del podatkov za stik z e-poštnim naslovom. | { e-pošta: »bob.jones@contoso.com«, FullMatch: "<bob.jones@contoso.com>", SubMatches: [ "bob.jones@contoso.com" ], StartMatch: 11 } |
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" |
Izvleče samo del podatkov za stik z e-poštnim naslovom. Zakonit naslov ni najden (ni znaka @), zato funkcija vrne blank vrednost. | prazno |
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) |
Izvleče dele jezikovne oznake z jezikom, skriptom in regijo, ki jih vrne funkcija Language. Ti rezultati veljajo za ZDA; za več primerov glejte dokumentacijo funkcije Language. Operator (?: združi znake, ne da bi ustvaril še eno podujemanje. | { 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)?" ) |
Izvleče ure, minute in sekunde iz vrednosti trajanja ISO 8601. Izvlečene številke so še vedno v besedilnem nizu; uporabite funkcijo Value, da ga pretvorite v številko, preden se na njem izvedejo matematične operacije. | { hours: "2", minutes: "1", seconds: "39", FullMatch: "PT2H1M39S", SubMatches:["2","1","39"], StartMatch: 1 } |
Poglejmo še zadnji primer. Če želite pretvoriti ta niz v vrednost datum/čas s funkcijo Time, morate poimenovana podujemanja vnesti posamično. Uporabite lahko funkcijo With, ki deluje na zapisu, ki ga vrne operator Match:
With(
Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
Time( Value( hours ), Value( minutes ), Value( seconds ) )
)
Za te primere dodajte kontrolnik Button, nastavite njegovo lastnost OnSelect na to formulo in nato izberite gumb:
Set( pangram, "The quick brown fox jumps over the lazy dog." )
Formula | Opis | Rezultat |
---|---|---|
Match( pangram, "THE", IgnoreCase ) |
Poiščite vsa ujemanja za »THE« v besedilnem nizu, ki ga vsebuje spremenljivka pangram. Niz vsebuje dve ujemanji, vendar je vrnjeno le prvo, ker uporabljate funkcijo Match in ne MatchAll. Stolpec SubMatches je prazen, ker niso bila določena nobena podujemanja. | { FullMatch: "The", SubMatches: [ ], StartMatch: 32 } |
MatchAll( pangram, "the" ) |
Poiščite vsa ujemanja za »the« v besedilnem nizu, ki ga vsebuje spremenljivka pangram. Preskus razlikuje med velikimi in malimi črkami, zato je najden le drugi primerek besede »the«. Stolpec SubMatches je prazen, ker niso bila določena nobena podujemanja. | |
MatchAll( pangram, "the", IgnoreCase ) |
Poiščite vsa ujemanja za »the« v besedilnem nizu, ki ga vsebuje spremenljivka pangram. V tem primeru preskus ne razlikuje med velikimi in malimi črkami, zato sta najdena oba primerka besede. Stolpec SubMatches je prazen, ker niso bila določena nobena podujemanja. | |
MatchAll( pangram, "\b\wo\w\b" ) |
Poišče vse besede s tremi črkami in črko »o« na sredini. Upoštevajte, da je beseda »brown« izključena, ker ni beseda s tremi črkami in se ne ujema z izrazom »\b« (besedna meja). | |
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) |
Poišče ujemanje za vse znake med bedama »fox« in »dog«. | { between: "jumps over the lazy", FullMatch: "fox jumps over the lazy dog", SubMatches: [ "jumps over the lazy" ], StartMatch: 17 } |
Prikaz rezultatov za MatchAll v galeriji:
Na praznem zaslonu vstavite prazen navpičen kontrolnik Gallery.
Nastavite lastnost Items za galerijo na MatchAll( pangram, "\w+" ) ali MatchAll( pangram, MultipleLetters ).
V sredini kontrolnika za galerijo izberite »Dodaj element z zavihka Vstavljanje«, da izberete predlogo galerije.
Dodajte kontrolnik Label v predlogo galerije.
Nastavite lastnost Besedilo za oznako na ThisItem.FullMatch.
Galerija se napolni z vsemi besedami v našem vzorčnem besedilu. Spremenite velikost predloge galerije in kontrolnika oznake, da boste videli vse besede na enem zaslonu.