Share via


Funkcije IsMatch, Match in MatchAll

Velja za: Aplikacije delovnega območja Aplikacije Power Platform , ki temeljijo na modelu 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.

Funkcija Match vrne zapis informacij za prvo najdeno ujemanje, funkcija MatchAll pa vrne tabelo zapisov za vsako najdeno ujemanje. Zapis ali zapisi vsebujejo:

Column Vnesi Description
poimenovano podujemanje ali podujemanja 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 izvajanje ujemanja, ki ne razlikuje med velikimi in malimi črkami.
  • Funkcija IsMatch poišče ujemanje za celoten besedilni niz (Complete MatchOption), funkciji Match in MatchAll pa poiščeta ujemanje kjerkoli v besedilnem nizu (Contains MatchOption). Uporabite Complete, Contains, BeginsWith ali EndsWith, kot ustreza vašemu primeru.

IsMatch vrne vrednost true, če se besedilni niz ujema z vzorcem, ali false, če se ne. Match vrne blank vrednost, če ni najdeno nobeno ujemanje, ki ga je mogoče preskusiti s funkcijo IsBlank. MatchAll vrne prazno tabelo, če ni najdeno nobeno ujemanje, ki ga je mogoče preskusiti 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 operatorjem spajanja niza&. »abc« & Digit & »\s+« je veljaven vzorec, ki se ujema s črkami »a«, »b« in »c«, ki mu sledi števka od 0 do 9, ki ji sledi vsaj en beli 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 spajanja nizov& , če želite združiti svoje besedilne nize s člani enuma Match :

Enumerator Match Opis Regularni izraz
Any Ujema se s katerimkoli znakom. .
Comma Ujema se z vejico. ,
Digit Ujema se z eno številko (0 do 9). \d
Email Ujema se z e-poštnim naslovom, ki vsebuje simbol »afna« (»@«), in imenom domene, ki vsebuje piko (».«). .+\@.+\\.[^\\.]{2,}
Hyphen Ujema se z vezajem. \-
LeftParen Ujema se z levim oklepajem »(«. \(
Letter Ujema se s črko. \p{L}
MultipleDigits Ujema se z eno ali več številkami. \d+
MultipleLetters 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*
OptionalLetters 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*
Period Ujema se s piko (».«). \.
RightParen Ujema se z desnim oklepajem »)«. \)
Space Ujema se z znakom, ki doda prazen prostor. \s
Tab Ujema se s tabulatorjem. \t

Na primer, vzorec "A" in MultipleDigits se bo ujemal s črko "A", ki ji sledi ena ali več številk.

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

Delovanje teh funkcij lahko spremenite tako, da določite eno ali več možnosti, ki jih lahko združite z operatorjem spajanja niza (&).

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.Vsebuje 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( Text, Pattern [, Options ] )

  • Text – obvezno. Besedilni niz za preskus.
  • Pattern – obvezno. Vzorec za preskus kot besedilni niz. Spojite vnaprej določene vzorce, ki jih določa enumerator Match ali vnesite regularni izraz. Pattern mora biti stalna formula brez kakršnih koli spremenljivk, virov podatkov ali drugih dinamičnih sklicev, ki se spreminjajo med izvajanjem aplikacije.
  • Options – izbirno. Kombinacija besedilnega niza za vrednosti enumeratorja MatchOptions. Privzeto se uporablja MatchOptions.Complete.

Match( Text, Pattern [, Options ] )

  • Text – obvezno. Besedilni niz za ujemanje.
  • Pattern – obvezno. Vzorec za ujemanje kot besedilni niz. Spojite vnaprej določene vzorce, ki jih določa enumerator Match ali vnesite regularni izraz. Pattern mora biti stalna formula brez kakršnih koli spremenljivk, virov podatkov ali drugih dinamičnih sklicev, ki se spreminjajo med izvajanjem aplikacije.
  • Options – izbirno. Kombinacija besedilnega niza za vrednosti enumeratorja MatchOptions. Privzeto se uporablja MatchOptions.Contains.

MatchAll( Text, Pattern [, Options ] )

  • Text – obvezno. Besedilni niz za ujemanje.
  • Pattern – obvezno. Vzorec za ujemanje kot besedilni niz. Spojite vnaprej določene vzorce, ki jih določa enumerator Match ali vnesite regularni izraz. Pattern mora biti stalna formula brez kakršnih koli spremenljivk, virov podatkov ali drugih dinamičnih sklicev, ki se spreminjajo med izvajanjem aplikacije.
  • Options – izbirno. 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«. true
IsMatch( TextInput1.Text, "Good bye" ) Preskusi, ali se uporabnikov vnos natančno ujema z nizom »Good bye«. false
IsMatch( TextInput1.Text, "hello", Contains ) Preskusi, ali uporabnikov vnos vsebuje besedo »hello« (razlikuje med velikimi in malimi črkami). false
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Preskusi, ali uporabnikov vnos vsebuje besedo »hello« (ne razlikuje med velikimi in malimi črkami). true

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 true
IsMatch( "joan@contoso.com", Email ) Poišče ujemanje za e-poštni naslov true
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) Poišče ujemanje za zaporedje številk, pike in nato nič ali več številk. true
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. false

Regularni izrazi

Formula Opis Rezultat
IsMatch( "986", "\d+" ) Poišče ujemanje za celo število, večje od nič. true
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. true
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. true
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. true
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. false
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. false

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 za pangram.
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 s funkcijo »IgnoreCase«.
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). MatchAll za pangram s črkami b, wo, w in b.
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:

  1. Na praznem zaslonu vstavite prazen navpičen kontrolnik Gallery.

  2. Nastavite lastnost Items za galerijo na MatchAll( pangram, "\w+" ) ali MatchAll( pangram, MultipleLetters ).

    Galerija predmetov.

  3. V sredini kontrolnika za galerijo izberite »Dodaj element z zavihka Vstavljanje«, da izberete predlogo galerije.

  4. Dodajte kontrolnik Label v predlogo galerije.

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

    Lastnost besedila.