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 |
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( 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( 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). | |
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:
Într-un ecran gol, introduceți un control vertical gol Gallery.
Setați proprietatea Elemente ale galeriei la MatchAll (pangram, "\ w +") sau MatchAll (pangram, MultipleLetters).
Selectați "Adăugare element din fila Inserare" din mijlocul controlului galeriei pentru a selecta șablonul galeriei.
Adăugați un control Label la șablonul galeriei.
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.