Deli z drugimi prek


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