Partajați prin


Funcțiile IsMatch, Match și MatchAll

Se aplică pentru: planșă de lucru apps Aplicații bazate pe model Power Pages Power Platform CLI

Testează o potrivire sau extrage porțiuni dintr-un șir text pe baza unui model.

Descriere

Funcția IsMatch testează dacă un șir text se potrivește cu un model care poate cuprinde caractere obișnuite, modele predefinite sau o expresie uzuală. Funcțiile Match și MatchAll returnează ceea ce a fost potrivit, inclusiv sub-potriviri.

Utilizați IsMatch pentru a valida ce a introdus un utilizator într-un control Intrare text. De exemplu, puteți confirma dacă utilizatorul a introdus o adresă de e-mail validă înainte ca rezultatul să fie salvat în sursa de date. Dacă introducerea nu corespunde criteriilor dvs., adăugați alte controale care îi solicită utilizatorului să corecteze introducerea.

Utilizați Match pentru a extrage primul șir de text care se potrivește cu un model și MatchAll pentru a extrage toate șirurile text care se potrivesc. De asemenea, puteți extrage sub-potriviri pentru a analiza șiruri complexe.

Match returnează o înregistrare a informațiilor pentru prima potrivire găsită și MatchAll returnează un tabel de înregistrări pentru fiecare potrivire găsită. Înregistrarea sau înregistrările conțin:

Column Tipul Descriere
sub-potrivire denumită sau sub-potriviri SMS Fiecare sub-potrivire denumită va avea propria coloană. Creați o sub-potrivire denumită folosind (?<nume>...) în expresia uzuală. Dacă o sub-potrivire denumită are același nume ca una dintre coloanele predefinite (de mai jos), sub-potrivirea are prioritate și este generat un avertisment. Pentru a evita acest avertisment, redenumiți sub-potrivirea.
Meci complet Text Toate șirurile text care au fost potrivite.
StartMatch Număr Poziția de pornire a potrivirii în șirul text de intrare. Primul caracter al șirului returnează 1.
Submeciuri Tabel cu text cu o singură coloană (coloană Valoare) Tabelul sub-potrivirilor denumite și fără nume în ordinea în care apar în expresia obișnuită. În general, cu sub-potrivirile denumite este mai ușor de lucrat și se încurajează utilizarea lor. Utilizați funcția ForAll sau funcțiile Last( FirstN( ... ) ) pentru a lucra cu o sub-potrivire individuală. Dacă în expresia regulată nu sunt definite sub-potriviri, acest tabel va fi prezent, dar gol.

Aceste funcții acceptă MatchOptions. Implicit:

  • Aceste funcții îndeplinesc o potrivire care face diferențierea între litere mari și mici. Utilizați MatchOptions.IgnoreCase pentru a efectua potriviri care nu țin cont de majuscule.
  • IsMatch se potrivește întregului șir de text (Complete MatchOption), în timp ce Match și MatchAll căutați o potrivire oriunde în șirul de text (Conține MatchOption). Utilizați Complete, Contains, BeginsWith sau EndsWith ca fiind corespunzător pentru scenariu.

IsMatch returnează true dacă șirul text se potrivește cu modelul sau false dacă nu 't. Potrivirea returnează blank dacă nu se găsește nicio potrivire care să poată fi testată cu IsBlank funcţie. MatchAll returnează un tabel gol dacă nu se găsește nicio potrivire care să poată fi testată cu funcția IsEmpty .

Dacă utilizați MatchAll pentru a împărți un șir text, luați în considerare utilizarea Split, care este mai simplu de utilizat și mai rapid.

Modele

Cheia utilizării acestor funcții constă în descrierea modelului care trebuie să se potrivească. Descrieți modelul într-un șir text ca o combinație de:

  • Caractere uzuale, cum ar fi "abc" sau "123".
  • Modele predefinite, cum ar fi Litere, MultipleDigits sau E-mail. (Enumerarea Match definește aceste modele.)
  • Coduri cu expresie uzuală, cum ar fi "\d+\s+\d+" sau "[a-z]+".

Combinați aceste elemente utilizând operatorul de concatenare șir &. De exemplu, „abc” & Cifre și amp; „\s+” este un model valid care se potrivește cu caracterele „a”, „b” și „c”, urmate de o cifră de la 0 la 9, urmată de cel puțin un caracter de spațiu alb.

Caractere uzuale

Cel mai simplu model este o secvență de caractere uzuale care trebuie potrivite cu exactitate.

De exemplu, atunci când este utilizat cu funcția IsMatch, șirul "Hello" se potrivește cu modelul "Buna" în mod exact. Nici mai mult, nici mai puțin. Șirul "hello!" nu se potrivește cu modelul din cauza semnului de exclamație de la sfârșit și deoarece literă mare/mică este realizat greșit pentru litera "h". (Vedeți MatchOptions pentru modalități de modificare a acestui comportament.)

În limbajul modelului, anumite caractere sunt rezervate în scopuri speciale. Pentru a utiliza aceste caractere, fie pentru a folosi ca prefix caracterul cu \ (bară oblică inversă) pentru a indica faptul că personajul ar trebui să fie luat literal sau să folosească unul dintre modelele predefinite descrise mai târziu în acest subiect. Acest tabel listează caracterele speciale:

Caracter special Descriere
. punct
? semnul întrebării
* asterisc
+ plus
( ) paranteze
[ ] paranteze drepte
{ } acolade
^ accent circumflex
$ simbolul dolarului
| bară sau canal vertical
\ bară oblică inversă

De exemplu, puteți potrivi "Hello?"” folosind modelul "Hello\?" cu o bară oblică inversă înainte de semnul întrebării.

Modele predefinite

Modelele predefinite oferă o modalitate simplă de a se potrivi fie cu un set de caractere, fie cu o secvență de caractere multiple. Utilizați operatorul de concatenare a șirurilor & pentru a combina propriile șiruri de text cu membrii Potrivire enumerare:

Potrivire enumerare Descriere Expresie uzuală
Orice Se potrivește cu orice caracter. .
Virgulă Se potrivește cu o virgulă. ,
Cifră Se potrivește cu o singură cifră (de la "0" până la "9"). \d
E-mail Se potrivește cu o adresă de e-mail care conține un simbol ("@") și un nume de domeniu care conține un punct (".") .+\@.+\\.[^\\.]{2,}
Cratimă Se potrivește cu cratima. \-
LeftParen Corespunde cu o paranteză stângă "(". \(
Scrisoare Se potrivește cu o literă. \p{L}
Cifre multiple Corespunde cu una sau mai multe cifre. \d+
Litere multiple Corespunde cu una sau mai multe litere. \p{L}+
MultipleNonSpaces Corespunde cu unul sau mai multe caractere care nu adaugă un spațiu gol (nici spațiu, filă sau linie nouă). \S+
Spații multiple Corespunde cu unul sau mai multe caractere care adaugă un spațiu gol (spațiu, filă sau linie nouă). \s+
NonSpace Se potrivește cu un singur caracter care nu adaugă spațiu gol. \S
Cifre opționale Corespunde cu nicio cifră, cu una sau mai multe cifre. \d*
Litere opționale Corespunde cu nicio cifră, cu una sau mai multe litere. \p{L}*
OpționalNonSpaces Corespunde cu niciun caracter, cu unul sau cu mai multe caractere care nu adaugă un spațiu gol. \S*
OptionalSpaces Corespunde cu niciun caracter, cu unul sau cu mai multe caractere care adaugă un spațiu gol. \s*
Perioadă Corespunde cu un punct ("."). \.
RightParen Corespunde cu o paranteză dreaptă ")". \)
Spaţiu Se potrivește cu un caracter care adaugă un spațiu gol. \s
Tab Se potrivește cu un caracter de filă. \t

De exemplu, modelul „A” & MultipleDigits se vor potrivi cu litera „A” urmată de una sau mai multe cifre.

Expresii uzuale

Modelul pe care îl folosesc aceste funcții este o expresie uzuală. Caracterele uzuale și modelele predefinite descrise mai devreme în acest subiect ajută la formarea de expresii uzuale.

Expresiile uzuale sunt foarte puternice, disponibile în multe limbaje de programare și utilizate pentru o mare varietate de scopuri. De asemenea, pot arăta adesea ca o secvență aleatorie de semne de punctuație. Acest articol nu descrie toate aspectele expresiilor uzuale, ci o mulțime de informații, tutoriale și instrumente sunt disponibile pe web.

Expresiile uzuale au în diferite stiluri și Power Apps utilizează o variantă a dialectului JavaScript. Vedeți sintaxă expresie uzuală pentru o introducere în sintaxă. Sub-potrivirile denumite (numite uneori grupuri de captare de numite) sunt acceptate:

  • Sub-potriviri denumite: (?<nume> ...)
  • Referințe numite: \k<nume>

În tabelul de enumerare Match mai devreme în acest subiect, fiecare enumerare apare în același rând ca și expresia ei corespunzătoare.

Opțiuni de potrivire

Puteți modifica comportamentul acestor funcții specificând una sau mai multe opțiuni, pe care le puteți combina folosind operatorul de concatenare șir (&).

Enumerare MatchOptions Descriere Impact asupra unei expresii uzuale
MatchOptions.BeginsWith Modelul trebuie să se potrivească de la începutul textului. Adăugă un ^ până la începutul expresiei uzuale.
MatchOptions.Complete Valoarea implicită pentru IsMatch. Modelul trebuie să se potrivească cu întregul șir al textului, de la început până la sfârșit. Adăugă un ^ până la începutul expresiei uzuale și $ până la sfârșitul expresiei uzuale.
MatchOptions.Contains Implicit pentru Match și MatchAll. Modelul trebuie să apară undeva în text, dar nu trebuie să îl înceapă sau să îl sfârșească. Nu modifică expresia uzuală.
MatchOptions.EndsWith Modelul trebuie să se potrivească cu sfârșitul șirului textului. Adăugă un $ până la sfârșitul expresiei uzuale.
MatchOptions.IgnoreCase Tratează litere mari și mici ca identice. În mod implicit, potrivirea face diferențierea între litere mari și mici Nu modifică expresia uzuală. Această opțiune este echivalentul modificatorului standard "i" pentru expresii uzuale.
MatchOptions.Multiline Potrivire pe mai multe linii. Nu modifică expresia uzuală. Această opțiune este echivalentul modificatorului standard "m" pentru expresii uzuale.

Utilizarea MatchAll este echivalentă cu utilizarea modificatorului standard "g" pentru expresii uzuale.

Sintaxă

IsMatch( Text, Pattern [, Opțiuni ] )

  • Text – Obligatoriu. Șirul text de testat.
  • Model – Obligatoriu. Modelul de testat ca șir text. Modele predefinite Concatenate pe care enumerarea Match definește sau oferă o expresie uzuală. Modelul trebuie să fie o formulă constantă fără variabile, surse de date sau alte referințe dinamice care se modifică pe măsură ce aplicația rulează.
  • Opțiuni – Opțional. O combinație șir text a valorilor de enumerare MatchOptions. În mod implicit, MatchOptions.Complete este folosit.

Potrivire( Text, Model [, Opțiuni ] )

  • Text – Obligatoriu. Șirul text de potrivit.
  • Model – Obligatoriu. Modelul de potrivit ca șir text. Modele predefinite Concatenate pe care enumerarea Match definește sau oferă o expresie uzuală. Modelul trebuie să fie o formulă constantă fără variabile, surse de date sau alte referințe dinamice care se modifică pe măsură ce aplicația rulează.
  • Opțiuni – Opțional. O combinație șir text a valorilor de enumerare MatchOptions. În mod implicit, MatchOptions.Contains este folosit.

MatchAll( Text, Pattern [, Opțiuni ] )

  • Text – Obligatoriu. Șirul text de potrivit.
  • Model – Obligatoriu. Modelul de potrivit ca șir text. Modele predefinite Concatenate pe care enumerarea Match definește sau oferă o expresie uzuală. Modelul trebuie să fie o formulă constantă fără variabile, surse de date sau alte referințe dinamice care se modifică pe măsură ce aplicația rulează.
  • Opțiuni – Opțional. O combinație șir text a valorilor de enumerare MatchOptions. În mod implicit, MatchOptions.Contains este folosit.

Exemple IsMatch

Caractere uzuale

Imaginează-ți că aplicația ta conține un control Intrare text numit TextInput1. Utilizatorul introduce valori în acest control pentru a fi stocat într-o bază de date.

Tipurile de utilizator Salut, lume în TextInput1.

Formulă Descriere Rezultat
IsMatch( TextInput1.Text, "Hello world" ) Testează dacă intrarea utilizatorului se potrivește cu exactitate cu șirul "Salut, lume". adevărat
IsMatch( TextInput1.Text, "Good bye" ) Testează dacă intrarea utilizatorului se potrivește cu exactitate cu șirul "La revedere". fals
IsMatch( TextInput1.Text, "hello", Contains ) Testează dacă intrarea utilizatorului conține cuvântul "salut" (sensibil la litere mari și mici). fals
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Testează dacă intrarea utilizatorului conține cuvântul "salut" (nu sunt sensibile la litere mari sau mici). adevărat

Modele predefinite

Formulă Descriere Rezultat
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) Corespunde cu codul numeric personal din Statele Unite adevărat
IsMatch( "joan@contoso.com", Email ) Corespunde unei adrese de e-mail adevărat
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) Corespunde cu o secvență de cifre, un punct și apoi zero sau mai multe cifre. adevărat
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) Corespunde cu o secvență de cifre, un punct și apoi zero sau mai multe cifre. În text nu apare un punct care să se potrivească, deci acest model nu este potrivit. fals

Expresii uzuale

Formulă Descriere Rezultat
IsMatch( "986", "\d+" ) Potriviți o valoare întreagă mai mare decât zero. adevărat
IsMatch( "1.02", "\d+(\.\d\d)?" ) Se potrivește cu o valoare pozitivă a monedei. Dacă introducerea conține o virgulă zecimală, introducerea trebuie să conțină și două caractere numerice după virgula zecimală. De exemplu, 3,00 este valabil, dar 3,1 nu. adevărat
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) Se potrivește cu o valoare pozitivă sau negativă a monedei. Dacă introducerea conține o virgulă zecimală, introducerea trebuie să conțină și două caractere numerice după virgula zecimală. adevărat
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) Corespunde cu codul numeric personal din Statele Unite. Validează formatul, tipul și lungimea câmpului de intrare furnizat. Șirul care se potrivește trebuie să fie format din trei caractere numerice urmate de o liniuță, apoi două caractere numerice urmate de o liniuță și apoi patru caractere numerice. adevărat
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) La fel ca în exemplul precedent, dar una dintre cratime nu se află la locul potrivit în intrare. fals
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) Validează o parolă puternică, care trebuie să conțină opt, nouă sau 10 caractere, pe lângă cel puțin o cifră și cel puțin un caracter alfabetic. Șirul nu trebuie să conțină caractere speciale. fals

Exemple Match și MatchAll

Formulă Descriere Rezultat
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" Extrage doar porțiunea de e-mail din informațiile de contact. {
email: "bob.jones@contoso.com",
FullMatch: "<bob.jones@contoso.com>",
SubMatches: [ "bob.jones@contoso.com" ],
StartMatch: 11
}
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" Extrage doar porțiunea de e-mail din informațiile de contact. Nu este găsită nicio adresă legală (nu există niciun simbol @), astfel încât funcția returnează blank. necompletat
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) Extrage porțiunile de limbă, script și regiune ale etichetei limbii pe care le returnează funcția Language. Aceste rezultate reflectă Statele Unite; vedeți documentația funcției Language pentru mai multe exemple. Operatorul (?: grupează caractere fără a crea altă subpotrivire. {
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)?" ) Extrage orele, minutele și secundele dintr-o valoare de durată ISO 8601. Numerele extrase sunt încă într-un șir text; utilizați funcția Value pentru a-l converti la un număr înainte de efectuarea operațiilor matematice în acesta. {
hours: "2",
minutes: "1",
seconds: "39",
FullMatch: "PT2H1M39S",
SubMatches:["2","1","39"],
StartMatch: 1
}

Haideți să analizăm ultimul exemplu. Dacă doriți să convertiți acest șir într-o valoare dată/oră folosind funcția Time trebuie să treceți individual în subprotrivirile numite. Pentru a face acest lucru, puteți utiliza funcția With care operează în înregistrarea care returnează Match:

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

Pentru aceste exemple, adăugați un control Button, setați proprietatea OnSelect pentru această formulă, apoi selectați butonul:

Set( pangram, "The quick brown fox jumps over the lazy dog." )
Formulă Descriere Rezultat
Match( pangram, "THE", IgnoreCase ) Găsiți toate potrivirile "THE" în șirul de text pe care le conține variabila pangram. Șirul conține două potriviri, dar numai primul este returnat pentru că utilizați Match și nu MatchAll. Coloana SubMatches este goală, deoarece nu au fost definite subpotriviri. {
FullMatch: "The",
SubMatches: [ ],
StartMatch: 32
}
MatchAll( pangram, "the" ) Găsiți toate potrivirile "the" în șirul de text pe care le conține variabila pangram. Testul face diferențierea între litere mari și mici, astfel încât se găsește doar a doua instanță "the". Coloana SubMatches este goală, deoarece nu au fost definite subpotriviri. MatchAll pentru pangram.
MatchAll( pangram, "the", IgnoreCase ) Găsiți toate potrivirile "the" în șirul de text pe care le conține variabila pangram. În acest caz, testul nu face diferențierea între litere mari și mici, astfel încât se găsesc ambele instanțe ale cuvântului. Coloana SubMatches este goală, deoarece nu au fost definite subpotriviri. MatchAll cu IgnoreCase.
MatchAll( pangram, "\b\wo\w\b" ) Găsește toate cuvintele din trei litere cu "o" la mijloc. Rețineți că "maro" este exclus pentru că nu este un cuvânt format din trei litere și, prin urmare, nu se potrivește cu "\b" (limita cuvântului). MatchAll pentru pangram cu b, wo, w și b.
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) Se potrivește cu toate caracterele dintre "vulpe" și "câine". {
between: "jumps over the lazy",
FullMatch: "fox jumps over the lazy dog",
SubMatches: [ "jumps over the lazy" ],
StartMatch: 17
}

Pentru a vedea rezultatele MatchAll într-o galerie:

  1. Într-un ecran gol, introduceți un control vertical gol Gallery.

  2. Setați proprietatea Elemente ale galeriei la MatchAll (pangram, "\ w +") sau MatchAll (pangram, MultipleLetters).

    Galeria de articole.

  3. Selectați "Adăugare element din fila Inserare" din mijlocul controlului galeriei pentru a selecta șablonul galeriei.

  4. Adăugați un control Label la șablonul galeriei.

  5. Setați proprietatea Text a etichetei la ThisItem.FullMatch.

    Galeria este completată cu fiecare cuvânt din exemplul nostru de text. Redimensionați șablonul galeriei și controlul etichetei pentru a vedea toate cuvintele pe un singur ecran.

    Proprietate text.