Notă
Accesul la această pagină necesită autorizare. Puteți încerca să vă conectați sau să modificați directoarele.
Accesul la această pagină necesită autorizare. Puteți încerca să modificați directoarele.
Funcțiile IsMatch, Match și MatchAll sunt utilizate pentru a extrage și valida modele din text. Modelul pe care îl folosesc se numește o expresie regulată.
Expresiile regulate sunt puternice și versatile. Totuși, ele pot apărea uneori ca o secvență aleatorie de semne de punctuație. Acest articol nu descrie toate aspectele expresiilor regulate, dar o multitudine de informații, tutoriale și instrumente sunt disponibile online.
Expresiile regulate au o istorie lungă și sunt disponibile în multe limbaje de programare. Fiecare limbaj de programare are propriul dialect de expresii regulate și există puține standarde. Pe cât posibil, ne străduim ca aceeași expresie regulată să ofere același rezultat în toate implementările. Power Fx Compatibilitatea nu este ușor de realizat, deoarece rulează pe JavaScript și .NET, care au diferențe semnificative. Power Fx Pentru a rula pe diferite platforme, expresiile regulate utilizează un subset de caracteristici acceptate pe scară largă în întreaga industrie. Power Fx
Prin urmare, unele expresii regulate care funcționează în alte medii ar putea fi blocate sau ar putea necesita ajustări în Power Fx. Erorile de timp de creare sunt raportate atunci când se întâlnesc funcții neacceptate. De aceea, expresia regulată și opțiunile trebuie să fie o constantă în timpul creării și nu dinamice, cum ar fi cele furnizate într-o variabilă.
Notă
Power Apps folosește o versiune anterioară de *expresii regulate*, care are mai puține limitări, dar și mai puține funcții. Power Fx MatchOptions.DotAll și MatchOptions.FreeSpacing nu sunt disponibile, iar definițiile pentru Match.Email și Match.Hyphen sunt diferite. Perechile de surogate Unicode nu sunt tratate ca un singur caracter. MatchOptions.NumberedSubMatches este valoarea implicită. Versiunea expresiilor regulate descrisă aici va fi disponibilă în curând, cu opțiunea „compatibilitate V1.0”. Power Apps Power Fx
Funcții compatibile
Power Fx acceptă următoarele caracteristici ale expresiilor regulate, cu note despre cum comportamentul ar putea diferi față de alte sisteme. Power Fx
Expresia regulată trebuie să fie constantă și să nu fie calculată sau stocată într-o variabilă. Sunt acceptate operatorul & , interpolare de șiruri $"{...}" și funcțiile Concatenate, Char și UniChar cu argumente constante.
Caractere literale
| Caracteristică | Descriere |
|---|---|
| Caractere literale | Orice caracter Unicode poate fi inserat direct, cu excepția \, [, ], ^, $, ., |, ?, *, +, (, ), { și }. Când se utilizează MatchOptions.FreeSpacing, #, și alte \s spații, acestea trebuie să fie marcate cu caractere escape, deoarece au o semnificație diferită. |
| Caractere literale evadate |
\ (bară oblică inversată) urmată de unul dintre caracterele literale directe, cum ar fi \? pentru a insera un semn de întrebare.
\# și \ poate fi folosit chiar și atunci când MatchOptions.FreeSpacing este dezactivat pentru consecvență. |
| Coduri de caractere hexazecimale și Unicode |
\x20 cu exact două cifre hexazecimale, \u2028 cu exact patru cifre hexazecimale și poate fi folosit pentru surogate superioare și inferioare. |
| Punct de cod Unicode |
\u{01F47B} cu până la opt cifre hexazecimale. Trebuie să fie în intervalul 0 - U+10FFFF și nu poate fi folosit nici pentru un surogat superior, nici pentru unul inferior. Poate rezulta într-o pereche surogat (două caractere) dacă este mai mare decât U+FFFF. |
| Întoarcerea transportului |
\r, la fel ca Char(13). |
| Caracter de linie nouă |
\n, la fel ca Char(10). |
| Avansare formular |
\f, la fel ca Char(12). |
| Tab orizontal |
\t, la fel ca Char(9). |
Folosiți \x sau \u în schimb. Codurile octale pentru caractere, cum ar fi \044 sau \o{044} , nu sunt permise, deoarece pot fi ambigue cu referințe inverse numerotate.
\v nu este acceptat deoarece este ambiguu în toate limbajele de expresii regulate. Folosește \x0b pentru o tabulare verticală sau [\x0b\f\r\n\x85\u2028\u2029] pentru spații albe verticale.
Afirmații
Aserțiunile se potrivesc cu o anumită poziție din text, dar nu ocupă niciun caracter.
| Caracteristică | Descriere |
|---|---|
| Începutul liniei |
^, se potrivește cu începutul textului sau al unei linii dacă se utilizează MatchOptions.Multiline . |
| Capăt de linie |
$, se potrivește cu sfârșitul textului sau cu sfârșitul unei linii dacă se utilizează MatchOptions.Multiline . |
| Previzualizare |
(?=a) și (?!a), se potrivește în continuare cu un model. |
| Privește în urmă |
(?<=b) și (?<!b), se potrivește cu modelul din spatele acestuia. |
| Pauze de cuvinte |
\b și \B, folosind definiția Unicode a literelor [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]. |
$ se potrivește cu sfârșitul unei linii, inclusiv orice caractere \r\n, \r sau \n de la sfârșit.
Aserțiunile Lookahead și lookbehind nu pot conține subpotriviri sau cuantificatori nelimitați în interior și nu pot fi utilizate cu un cuantificator în exterior.
Clase de personaje
| Caracteristică | Descriere |
|---|---|
| Punct |
., se potrivește cu tot cu excepția \r și \n cu excepția cazului în care se utilizează MatchOptions.DotAll . |
| Clasa de personaje |
[abc] listă de caractere, [a-fA-f0-9] gamă de caractere, [^a-z] totul în afară de aceste caractere. Clasele de caractere nu pot fi imbricate, scăzute sau intersectate, iar multe semne de punctuație nu pot apărea de două ori la rând (@@, %%, !! etc.). |
| Caractere de cuvânt |
\w și \W folosind definiția Unicode a literelor [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}].
\W nu poate fi folosit într-o clasă de caractere negative. |
| Caractere numerice |
\d include cifrele 0 până la9 și \p{Nd}, \D se potrivește cu tot, cu excepția caracterelor care se potrivesc cu \d.
\D nu poate fi folosit într-o clasă de caractere negative. |
| Personaje spațiale |
\s include caractere de spațiere [ \t\n\x0b\f\r\x85\u2028\u2029\p{Z}], \S care se potrivește cu tot cu excepția caracterelor care se potrivesc cu \s.
\S nu poate fi folosit într-o clasă de caractere negative. |
| Categorie de caractere Unicode |
\p{Ll} potrivește toate literele minuscule Unicode, în timp ce \P{Ll} potrivește tot ce nu este o literă minusculă Unicode.
\P{} nu poate fi folosit într-o clasă de caractere negative. |
Pentru a crește claritatea și a evita ambiguitatea, clasele de caractere formate din paranteze pătrate sunt mai restrictive decât în alte limbaje de expresii regulate:
- Cratimele literale trebuie să fie evadate. Folosiți
[\-a]în loc de[-a]pentru a potrivi-saua. - Parantezele pătrate de la început trebuie să fie escape. Folosiți
[\[a]în loc de[[]pentru a potrivi[saua. - Dacă nu este primul caracter și indică negarea, caracterul trebuie să fie marcat cu escape. Folosiți
[a\^]în loc de[a^]pentru a potrivi^saua. - Acoladele trebuie să fie prevăzute cu un semn de evadare. Folosiți
[\{\}]pentru a se potrivi{sau}. - Clasa de caractere goală
[]nu este acceptată. Pentru a include o paranteză pătrată de închidere într-o clasă de caractere, folosiți caracterul escape.
Categorii de caractere Unicode acceptate de \p{} și \P{}:
- Litere:
L,Lu,Ll,Lt,Lm,Lo - Marcaje:
M,Mn,Mc,Me - Numere:
N,Nd,Nl,No - Punctuație:
P,Pc,Pd,Ps,Pe,Pi,Pf,Po - Simboluri:
S,Sm,Sc,Sk,So - Separatori:
Z,Zs,Zl,Zp - Control și format:
Cc,Cf, în timp ce alte categorii de prefixeCnu sunt acceptate.
\W, \D, \S și \P{} nu pot fi utilizate într-o clasă de caractere negate [^...]. Pentru a fi implementate pe anumite platforme, aceste clase de caractere negative sunt traduse în echivalentele lor Unicode, ceea ce ar putea fi dificil de realizat dacă ar fi și negate.
Caracterele Unicode între U+10000 și U+10FFFF, care necesită perechi surogate, nu sunt acceptate în clasele de caractere.
Cuantificatori
| Caracteristică | Descriere |
|---|---|
| Lacomul zero sau unu |
? nu se potrivește de zero sau o singură dată, cu o potrivire cât mai mare posibil. |
| Zero sau mai mulți lacomi |
* se potrivește de zero sau mai multe ori, cu o potrivire cât mai mare posibil. |
| Lacomi unul sau mai mulți |
+ se potrivește una sau mai multe ori, cu o potrivire cât mai mare posibil. |
| Lacom cel puțin n |
{n,} se potrivește de cel puțin n ori, cu o potrivire cât mai mare posibil. De exemplu, a{3,} se potrivește cu toate caracterele din aaaaa. |
| Lacom între n și m |
{n,m} potriviri între n și m ori, cu o potrivire cât mai mare posibil. De exemplu, a{1,3} se potrivește cu primele trei caractere ale lui aaaaa. |
| Leneșul zero sau unu |
?? nu se potrivește de zero sau o singură dată, cu o potrivire cât mai mică posibil. |
| Zero sau mai multe leneșe |
*? se potrivește de zero sau mai multe ori, cu o potrivire cât mai mică posibil. |
| Unul sau mai mulți leneși |
+? se potrivește una sau mai multe ori, cu o potrivire cât mai mică posibil. |
| Leneș cel puțin n |
{n,}? se potrivește de cel puțin n ori, cu o potrivire cât mai mică posibil. De exemplu, a{3,}? se potrivește doar cu primele trei caractere din aaaaa. |
| Leneș între n și m |
{n,m}? potriviri între n și m ori, cu o potrivire cât mai mică posibil. De exemplu, a{1,3}? se potrivește doar cu primul caracter din aaaaa. |
| Exact n |
{n} se potrivește exact de n ori. De exemplu, a{3} se potrivește cu exact trei caractere din aaaaa. |
Cuantificatorii posesivi nu sunt acceptați.
Amestecarea subpotrivirilor și a cuantificatorilor are limitări. Pentru mai multe informații, consultați Potriviri secundare posibile goale.
Grupuri
| Caracteristică | Descriere |
|---|---|
| Grupare |
( și ) sunt folosite pentru a grupa elementele în care vor fi aplicați cuantificatorii. De exemplu, (abc)+ se potrivește abcabc. |
| Alternanţă |
a|b se potrivește cu „a” sau „b”, adesea folosit într-un grup. |
| Subpotrivire denumită și referință anterioară |
(?<name>chars) capturează o subpotrivire cu numele name, la care se face referire cu \k<name>. Nu poate fi utilizat dacă este activat MatchOptions.NumberedSubMatches . |
| Subpotrivire numerotată și referință anterioară | Când MatchOptions.NumberedSubMatches este activat, (a) capturează o subpotrivire la care se face referire cu \1. |
| Grup fără capturare |
(?:a), creează un grup fără a captura rezultatul ca o subpotrivire denumită sau numerotată. Toate grupurile nu sunt capturate, cu excepția cazului în care este activat MatchOptions.NumberedSubMatches . |
Subpotrivirile denumite și numerotate nu pot fi folosite împreună. În mod implicit, subpotrivirile denumite sunt activate și sunt preferate pentru claritate și ușurință în întreținere, în timp ce grupurile de captură standard devin grupuri fără scop de captură, cu performanță îmbunătățită. Acest comportament poate fi modificat cu MatchOptions.NumberedSubMatches care oferă grupuri de captură tradiționale, dar dezactivează grupurile de captură denumite. Unele implementări tratează diferit o combinație de grupuri de captură numerotate și denumite, motiv pentru care Power Fx o dezactivează.
Grupurile de captură cu autoreferențiere nu sunt acceptate, de exemplu expresia regulată (a\1).
Două grupuri de captură nu pot avea același nume; de exemplu, expresia regulată (?<id>\w+)|(?<id>\d+) nu este acceptată.
Numele unei subpotriviri denumite trebuie să înceapă cu un caracter \p{L} sau _ și poate continua cu aceste caractere plus \p{Nd}. Numele sunt limitate în lungime la 62 de unități de cod UTF-16.
De asemenea, nu sunt acceptate referințele inverse către subpotriviri eventual goale și către subpotriviri dintr-o funcție de „look back” sau „look forward”.
Unele implementări oferă o opțiune de „captură explicită” pentru a îmbunătăți performanța, ceea ce este inutil, deoarece este setarea implicită. Power Fx MatchOptions.NumberedSubMatches îl dezactivează și activează capturile numerotate implicit.
Amestecarea subpotrivirilor și a cuantificatorilor are limitări. Consultați Posibil subpotriviri goale pentru mai multe informații.
Comentarii
| Caracteristică | Descriere |
|---|---|
| Comentarii în linie |
(?# comment here), care este ignorat ca comentariu. Comentariul se termină cu următoarea paranteză închisă, chiar dacă în comentariu există o paranteză deschisă. |
Consultați MatchOptions.FreeSpacing pentru o alternativă la formatarea și comentarea expresiilor regulate.
Opțiuni în linie
| Caracteristică | Descriere |
|---|---|
| Opțiuni în linie |
(?im) este același lucru cu utilizarea MatchOptions.IgnoreCase și MatchOptions.Multiline. Trebuie setat la începutul expresiei regulate. |
Modurile inline acceptate sunt [imsx]. Acestea corespund la MatchOptions.IgnoreCase, MatchOptions.Multiline, MatchOptions.DotAll și respectiv MatchOptions.FreeSpacing.
n este, de asemenea, acceptat pentru compatibilitate, dar nu are niciun efect, deoarece este valoarea implicită și este incompatibil cu MatchOptions.NumberedSubMatches.
Opțiunile inline nu pot fi folosite pentru a dezactiva o opțiune sau a seta o opțiune pentru o subexpresie.
Opţiuni
Opțiunile de potrivire modifică comportamentul potrivirii expresiilor regulate. Există două modalități de a activa opțiunile, care pot fi combinate atâta timp cât nu există conflicte:
-
Valoarea enumerației MatchOptions transmisă ca al treilea argument pentru Match, MatchAll și IsMatch. Opțiunile pot fi combinate cu operatorul
&sau funcțiaConcatenate, de exempluMatchOptions.DotAll & MatchOptions.FreeSpacing. Toate funcțiile expresiilor regulate necesită ca MatchOptions să fie o valoare constantă, aceasta nu poate fi calculată sau stocată într-o variabilă. -
(?...)prefix chiar la începutul expresiei regulate. Opțiunile pot fi combinate cu mai multe litere în construcție(?...), de exemplu(?sx). Unele opțiuni nu au un(?...)echivalent, dar pot exista și alte modalități de a obține același efect, de exemplu MatchOptions.BeginsWith este echivalentul lui^la începutul expresiei regulate.
Conține
Activat cu MatchOptions.Conține fără o expresie regulată echivalentă în text. MatchOptions.Contains este valoarea implicită pentru toate funcțiile din afara Power Apps; în Power Apps MatchOptions.Complete este valoarea implicită pentru IsMatch.
Finalizați
Activat cu MatchOptions.Complete sau utilizați ^ și $ la începutul și respectiv al expresiei regulate.
BeginsWith
Activat cu MatchOptions.BeginsWith sau utilizat ^ la începutul și a expresiei regulate.
EndsWith
Activat cu MatchOptions.EndsWith sau utilizați $ la sfârșitul expresiei regulate.
DotAll
Activat cu MatchOptions.DotAll sau (?s) la începutul expresiei regulate.
În mod normal, operatorul punct . se potrivește cu toate caracterele, cu excepția caracterelor de linie nouă [\n\x0b\f\r\x85\u2028\u2029]. Cu modificatorul DotAll , toate caracterele sunt potrivite, inclusiv liniile noi.
În acest exemplu, se potrivește doar „Hello”, deoarece, în mod implicit, . nu se va potrivi cu linia nouă:
Trim( Match( "Hello
World", ".*" ).FullMatch )
// returns
// "Hello"
Dar dacă adăugăm modificatorul DotAll , atunci linia nouă și toate caracterele ulterioare se potrivesc:
Trim( Match( "Hello
World", ".*", MatchOptions.DotAll ).FullMatch )
// returns
// "Hello
// World"
Spațiere liberă
Activat cu MatchOptions.FreeSpacing sau (?x) la începutul unei expresii regulate.
Spațierea liberă facilitează citirea și întreținerea unei expresii regulate complexe. Regulile sunt simple:
- Spațiile sunt ignorate în expresia regulată, inclusiv toate caracterele care se potrivesc cu
\s. Dacă doriți să potriviți un spațiu, utilizați\s,\,\t,\rsau\n. -
#începe un comentariu care rulează până la sfârșitul rândului. Acesta și toate caracterele care urmează după următorul caracter de linie nouă (caractere care nu se potrivesc cu.fără MatchOptions.DotAll) sunt ignorate. - Clasele de personaje nu sunt incluse în aceste modificări. Caracterele spațiale și
#se comportă ca de obicei. De exemplu,IsMatch( "a#b c", "(?x)a[ #]b[ #]c" )returnează true. Unele limbaje de expresii regulate includ clase de caractere cu spațiere liberă sau oferă o opțiune de includere a acestora, dar Power Fx nu o fac.
De exemplu, iată o expresie regulată complexă pentru potrivirea unei date și ore ISO 8601:
IsMatch(
"2025-01-17T19:38:49+0000",
"^\d{4}-(0\d|1[012])-([012]\d|3[01])(T([01]\d|2[0123]):[0-5]\d(:[0-5]\d(\.\d{3})?)?(Z|[\-+]\d{4}))?$"
)
// returns true
Și iată aceeași expresie regulată cu spațiere liberă utilizând mai multe linii, indentare pentru grupuri și comentarii la expresii regulate, ceea ce face ca această versiune să fie mai ușor de înțeles, validat și întreținut.
IsMatch( "2025-01-17T19:38:49+0000",
"(?x) # enables free spacing, must be very first
^ # matches from beginning of text
\d{4} # year (0000-9999)
-(0\d|1[012]) # month (00-12)
-([012]\d|3[01]) # day (00-31, range not checked against month)
(T([01]\d|2[0123]) # optional time, starting with hours (00-23)
:[0-5]\d # minutes (00-59)
(:[0-5]\d # optional seconds (00-59)
(\.\d{3})? # optional milliseconds (000-999)
)?
(Z|[\-+]\d{4}) # time zone
)?
$ # matches to end of text
"
)
// returns true
Ignoră majuscule/minuscule
Activat cu MatchOptions.IgnoreCase sau (?i) la începutul unei expresii regulate.
Potrivește textul dintr-o literă, fără a ține cont de majuscule/minuscule: literele majuscule se potrivesc cu literele mici, iar literele mici se potrivesc cu literele majuscule.
De exemplu:
IsMatch( "HELLO!", "hello", MatchOptions.IgnoreCase )
// returns true
IsMatch( "file://c:/temp/info.txt", "^FILE://", MatchOptions.IgnoreCase )
// returns true
Majoritatea părților sau Power Fx sunt conștiente de cultură, dar nu și aici. Utilizarea potrivirii culturale invariante este standardul industriei pentru expresiile regulate, inclusiv în JavaScript și Perl. Este util în al doilea exemplu, unde se potrivește o resursă de sistem, de exemplu, în cultura tr-TR unde I nu este echivalentul cu majuscule al lui i.
Dacă este necesară o potrivire care să țină cont de cultură și să nu țină cont de majuscule/minuscule, utilizați clasa characters cu caracterele potrivite, de exemplu [Hh][Ee][Ll][Ll][Oo] pentru primul exemplu.
Mai multe linii
Activat cu MatchOptions.Multiline sau (?m) la începutul unei expresii regulate.
În mod normal, ancorele ^ și $ se potrivesc cu începutul și cu textul de intrare. Cu modificatorul Multiline , aceste ancore se potrivesc cu începutul și sfârșitul rândurilor din textul de intrare, unde fiecare rând se termină cu \r, \n, \r\n sau sfârșitul textului de intrare. De exemplu:
MatchAll( "Hello" & Char(13) & Char(10) & "World", "^.+$" )
// returns
// "Hello"
Modele predefinite
Modelele predefinite vă permit să potriviți fie unul dintr-un set de caractere, fie o secvență de mai multe caractere. Folosește operatorul de concatenare a șirurilor & pentru a combina șirurile de text cu membrii enumului Match :
| 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ă (0 până la 9 și alți membri ai \p{Nd}). |
\d |
Se potrivește cu o adresă de e-mail care conține simbolul „arcă” (@) și un nume de domeniu care conține cel puțin un punct (.), delimitate prin spații și caractere de punctuație. |
vezi nota | |
| Cratimă | Se potrivește cu cratima. |
-
vezi nota |
| Paranteză stângă | Se potrivește 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+ |
| NonSpațiu | 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ționale fără spații | Corespunde cu niciun caracter, cu unul sau cu mai multe caractere care nu adaugă un spațiu gol. | \S* |
| Spații opționale | Corespunde cu niciun caracter, cu unul sau cu mai multe caractere care adaugă un spațiu gol. | \s* |
| Perioadă | Se potrivește cu un punct sau o albă .."). |
\. |
| Paranteză dreaptă | Se potrivește 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” și Match.MultipleDigits coresponde cu litera „A” urmată de una sau mai multe cifre.
Modelul *Match.Email* este mai complex decât restul. Detectează și extrage adrese de e-mail comune de forma local@hostname.tld, posibil din pasaje lungi de text, și acceptă caractere internaționale și emoji-uri. Folosește-l pentru a valida un formular care acceptă o adresă de e-mail ca intrare, ca un test rapid că intrarea se află într-un formular de e-mail. Dacă nu extrageți, utilizați MatchOptions.Complete pentru a detecta o adresă de e-mail, de exemplu, într-un control de introducere de text.
Totuși, Match.Email nu validează faptul că adresa de e-mail respectă numeroasele standarde în continuă evoluție pentru adrese de e-mail, nume de domeniu și domenii de nivel superior, care ar necesita o expresie regulată complicată ce ar trebui actualizată periodic. Deși majoritatea adreselor de e-mail sunt tratate conform așteptărilor, Match.Email coresponde cu unele majuscule/minuscule nevalide, cum ar fi o subliniere în numele gazdei, și nu coresponde cu unele majuscule/minuscule valide, cum ar fi adresele de e-mail sau adresele IP între ghilimele. Dacă este necesar, există numeroase expresii regulate pe web pentru detectarea unei adrese de e-mail cu adevărat legale. Testează întotdeauna expresia regulată pentru nevoile tale specifice înainte de a o utiliza în producție.
Dacă vrei să vezi expresia regulată utilizată, evaluează formula Text( Match.Email ). Prima parte potrivește caracterele dinaintea @ și exclude punctuația ASCII comună conform RFC 822 și reviziilor și punctuația Unicode de început și de sfârșit pentru o extragere mai ușoară, cum ar fi (, [, “, « și 「. Nu acceptă utilizarea neobișnuită și descurajată a șirurilor sau comentariilor între ghilimele. După @, a doua și a treia parte a expresiei regulate sunt identice și separate prin a ., asigurându-se că există întotdeauna cel puțin un . în adresă. Aceste părți exclud toate semnele de punctuație Unicode, cu excepția ., - și _. Adresele IP nu sunt acceptate. În întreaga adresă de e-mail, sunt acceptate caractere internaționale și emoji-uri.
În Power Apps, când nu se utilizează Power Fx 1.0, Match.Email și Match.Hyphen au definiții ușor diferite. Match.Email este mai simplu, dar nu este potrivit pentru extragerea unei adrese de e-mail, deoarece capturează spații. Anterior, Match.Hyphen era inclus în afara unei clase de caractere, ceea ce acum este ilegal.
Subpotriviri numerotate
Activat cu MatchOptions.NumberedSubMatches fără opțiune în linie.
(?n) este acceptată ca opusul acestei opțiuni din motive de compatibilitate și este valoarea implicită.
În mod implicit, (...) nu capturează, echivalentul a ceea ce majoritatea sistemelor numesc „captură explicită”. Pentru a captura, utilizați o captură denumită cu (?<name>...) cu backreference \k<name>. Utilizarea capturilor denumite îmbunătățește performanța prin eliminarea grupurilor care nu sunt necesare, îmbunătățind claritatea prin utilizarea numelor și nefiind predispusă la erori dacă poziția capturilor se modifică.
Dacă aveți o expresie regulată existentă, aceasta poate depinde de capturarea automată și numerotarea grupurilor, inclusiv a referințelor retrospective numerotate. Acest comportament este disponibil utilizând opțiunea MatchOptions.NumberedSubMatches .
Subpotrivirile denumite și numerotate nu pot fi folosite împreună. Deoarece unele implementări tratează diferit o combinație de grupuri de captură numerotate și denumite, Power Fx o dezactivează.
Posibile subpotriviri goale
Așa cum s-a menționat în introducere, expresiile regulate din Power Fx sunt limitate în mod intenționat la caracteristici care pot fi implementate în mod consistent pe .NET, JavaScript și alte motoare de expresii regulate din limbaje de programare. Erorile din momentul creării împiedică utilizarea caracteristicilor care nu fac parte din acest set.
Un aspect care poate diferi între implementări este modul în care sunt gestionate subpotrivirile goale. De exemplu, luați în considerare expresia regulată (?<submatch>a*)+ căreia i se cere să corespundă textului a. Pe .NET, submatch-ul are ca rezultat un șir de text gol, în timp ce pe JavaScript are ca rezultat a. Ambele pot fi considerate implementări corecte, deoarece cuantificatorul poate fi satisfăcut cu un șir gol, deoarece conținutul grupului are un cuantificator. +*
Pentru a evita rezultate diferite între implementări, subpotrivirile care ar putea fi goale nu pot fi utilizate cu un cuantificator. Power Fx Iată câteva exemple despre cum o subpotrivire ar putea fi goală:
| Exemple | Descriere |
|---|---|
(?<submatch>a{0,}b*)+ |
Tot conținutul subpotrivirii este opțional, așadar este posibil ca întreaga subpotrivire să fie goală. |
((<submatch>a)?b)+ |
Din cauza elementelor din afara submeciului, submeciul în ansamblu este opțional. ? |
(?<submatch>a|b*)+ |
Alternarea în cadrul submeciului cu ceva care ar putea fi gol ar putea duce la golirea întregului submeci. |
((?<submatch>a)|b)+ |
Alternarea în afara subpotrivirii ar putea fi corespondentă, caz în care subpotrivirea ar fi goală. b |
Subpotrivirea din (?<submatch>a+)+ nu poate fi goală deoarece trebuie să existe cel puțin una a în subpotrivire și este acceptată.
Unicode
Power Fx Expresiile regulate folosesc categorii Unicode pentru a defini \w, \d și \s, categoriile specifice fiind disponibile prin \p{..}.
Aceste definiții pot varia în funcție de platformă. De exemplu, standardul Unicode este actualizat periodic cu caractere noi, care vor fi implementate ulterior de platforme în ritmul lor propriu. Așteptați-vă la variații ale rezultatelor între platforme până când toate platformele sunt actualizate.
Power Fx Expresiile regulate asigură că informațiile despre categorie sunt întotdeauna disponibile pentru Planul multilingv de bază (caractere de la U+0 la U+ffff). Unele platforme nu implementează categorii pentru caracterele din Planul Suplimentar Multilingv și nu numai (U+10000 până la U+10ffff). Această limitare nu este de obicei o problemă, deoarece caracterele din Planul Multilingv de Bază sunt cele mai frecvent utilizate. Folosește valorile caracterelor direct în loc de categorii dacă scenariul tău implică caractere la sau peste U+10000. Testează-ți expresiile regulate pe platformele pe care intenționezi să le utilizezi.
Pot exista mici diferențe de tip „limită” între platforme. De exemplu, este posibil ca unele platforme să nu vadă ſ ca fiind potrivite s când MatchOptions.IgnoreCase este invocat. Dacă aceste caractere sunt importante pentru scenariul dvs., utilizați o clasă de caractere precum [ſsS] pentru a potrivi caracterele fără a ține cont de majuscule/minuscule și minuscule și pentru a include în mod explicit caracterele dorite.