Belešku
Pristup ovoj stranici zahteva autorizaciju. Možete pokušati da se prijavite ili da promenite direktorijume.
Pristup ovoj stranici zahteva autorizaciju. Možete pokušati da promenite direktorijume.
Funkcije IsMatch , Match i MatchAll se koriste za izdvajanje i validaciju obrazaca u tekstu. Obrazac koji koriste naziva se regularni izraz .
Regularni izrazi su moćni i svestrani. Međutim, oni se ponekad mogu pojaviti kao slučajni niz interpunkcijskih znakova. Ovaj članak ne opisuje sve aspekte regularnih izraza, ali mnoštvo informacija, tutorijala i alata dostupno je na mreži.
Regularni izrazi imaju dugu istoriju i dostupni su u mnogim programskim jezicima. Svaki programski jezik ima svoj dijalekt regularnih izraza, a postoji nekoliko standarda. Koliko god je to moguće, trudimo se da isti regularni izraz daje isti rezultat u svim Power Fx implementacijama. Kompatibilnost nije lako postići jer Power Fx radi na vrhu JavaScript-a i .NET-a koji imaju značajne razlike. Za pokretanje na različitim platformama,regularni Power Fx izrazi koriste podskup funkcija koje su široko podržane u industriji.
Kao rezultat toga, neki regularni izrazi koji rade u drugim okruženjima mogu biti blokirani ili im je potrebno prilagođavanje Power Fx. Greške u vremenu kreiranja se prijavljuju kao nepodržane funkcije. To je razlog zašto regularni izraz i opcije moraju biti konstanta autorskog vremena, a ne dinamična, kao što je obezbeđena u varijabli.
Belešku
Power Apps koristi raniju verziju regularnih izraza Power Fx , koja ima manje ograničenja, ali i manje funkcija. MatchOptions.DotAll i MatchOptions.FreeSpacing nisu dostupni i definicije Match.Email i Match.Hyphen su različite. Unicode surogat parovi se ne tretiraju kao jedan karakter. MatchOptions.NumberedSubMatches je podrazumevani. Verzija regularnih izraza opisana ovde je dostupna uskoro Power Apps , pod prekidačem "Power Fx V1.0 kompatibilnost".
Podržane funkcije
Power Fx Podržava sledeće funkcije regularnog izraza, sa napomenama o tome kako Power Fx se ponašanje može razlikovati od drugih sistema.
Regularni izraz mora biti konstantan i ne mora biti obračunat ili uskladišten u promenljivoj. Podržani su & operator, interpolacija $"{...}" stringa, i funkcije sa ConcatenateCharUniChar konstantnim argumentima.
Bukvalni znakovi
| Funkcija | Opis |
|---|---|
| Bukvalni znakovi | Bilo koji Unicode karakter može biti ubačen direktno, osim \, [, ], ^, $.|?*+(){ i. } Kada koristite MatchOptions.FreeSpacing, #,, i drugi \s razmak znakovi moraju biti pobegli jer imaju drugačije značenje. |
| Pobegli bukvalni likovi |
\ (obrnuta kosa crta) nakon čega sledi jedan od direktnih bukvalnih znakova, kao što \? je umetanje upitnika.
\# i može se koristiti čak i \ kada je MatchOptions.FreeSpacing onemogućen radi konzistentnosti. |
| Heksadecimalni i Unicode kodovi znakova |
\x20 sa tačno dve heksadecimalne cifre, \u2028 sa tačno četiri heksadecimalne cifre i može se koristiti za visoke i niske surogate. |
| Unicode kodna tačka |
\u{01F47B} sa do osam heksadecimalnih cifara. Mora biti u opsegu od 0 do U + 10FFFF i ne može se koristiti ni za visoku ni za nisku surogat majku. Može rezultirati surogat parom (dva znaka) ako je veći od U + FFFF. |
| Prevoz povratak |
\r, isto kao Char(13). |
| Nova linija karakter |
\n, isto kao Char(10). |
| Obrazac hrane |
\f, isto kao Char(12). |
| Horizontalna kartica |
\t, isto kao Char(9). |
Koristite \x ili \u umesto toga. Oktalni kodovi za znakove, kao što \044 su ili \o{044} su nedozvoljeni, jer mogu biti dvosmisleni sa numerisanim povratnim referencama.
\v nije podržan jer je dvosmislen u jezicima regularnih izraza. Koristi se \x0b za vertikalni jezičak ili [\x0b\f\r\n\x85\u2028\u2029] za vertikalni razmak.
Tvrdnje
Tvrdnje odgovaraju određenoj poziciji u tekstu, ali ne konzumiraju nikakve znakove.
| Funkcija | Opis |
|---|---|
| Početak linije |
^, poklapa se sa početkom teksta, ili linije ako se koristi MatchOptions.Multiline . |
| Kraj linije |
$, poklapa se sa krajem teksta, ili linije ako se koristi MatchOptions.Multiline . |
| Pretraživanje |
(?=a) i, mečevi (?!a) napred za obrazac. |
| Pretraživanje |
(?<=b) i, mečevi (?<!b) iza za obrazac. |
| Prelomi reči |
\b i \B, koristeći Unicode definiciju slova [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]. |
$ odgovara kraju linije, uključujući i bilo koji prateći \r\n, \r, ili \n.
Lookahead i lookbehind tvrdnje ne mogu da sadrže podpodudaranja ili neograničene kvantifikatore unutar, i ne mogu se koristiti sa kvantifikatorom spolja.
Klase karaktera
| Funkcija | Opis |
|---|---|
| Dot |
., odgovara svemu osim i \r\n osim ako se ne koristi MatchOptions.DotAll . |
| Klasa karaktera |
[abc] Spisak znakova, [a-fA-f0-9] opseg znakova, [^a-z] sve osim ovih znakova. Klase znakova ne mogu biti ugnežđene, oduzete ili ukrštene, a mnogi znakovi interpunkcije ne mogu se pojaviti dva puta zaredom (@@, %%,, !! itd.). |
| Znakovi reči |
\w i \W koristeći Unicode definiciju slova [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}].
\W ne može se koristiti u klasi negativnog karaktera. |
| Cifreni znakovi |
\d Uključuje cifre 0 i9\p{Nd}, \D odgovara svemu osim znakova koji se podudaraju \d.
\D ne može se koristiti u klasi negativnog karaktera. |
| Svemirski likovi |
\s Uključuje razmak znakova [ \t\n\x0b\f\r\x85\u2028\u2029\p{Z}], \S koji odgovara svemu osim znakova koji se podudaraju \s.
\S ne može se koristiti u klasi negativnog karaktera. |
| Unicode kategorija karaktera |
\p{Ll} odgovara svim Unicode malim slovima, dok \P{Ll} odgovara svemu što nije Unicode malo slovo.
\P{} ne može se koristiti u klasi negativnog karaktera. |
Da bi se povećala jasnoća i izbegla dvosmislenost, klase znakova u uglatim zagradama su restriktivnije nego u drugim jezicima regularnih izraza:
- Doslovni znakovi crtice moraju biti pobegnuti. Koristite
[\-a]umesto da[-a]se podudaraju-ilia. - Početne kvadratne zagrade moraju biti izbjegnute. Koristite
[\[a]umesto da[[]se podudaraju[ilia. - Osim ako to nije prvi znak i ukazuje na negaciju, karakter mora da se izbegne. Koristite
[a\^]umesto da[a^]se podudaraju^ilia. - Kovrdžava proteza mora da se pobegne. Koristi
[\{\}]se za podudaranje{ili}. - Prazna klasa
[]karaktera nije podržana. Da biste uključili završnu uglatu zagradu u klasu karaktera, pobegnite od nje.
Unicode kategorije znakova podržane od strane \p{} i \P{}:
- Slova:
L,Lu,,Ll,Lt,LmLo - Oznake:
M,Mn,,McMe - Brojevi:
N,Nd,,NlNo - Interpunkcija:
P,,,PcPd,Ps,,,PePiPfPo - Simboli:
S,Sm,,Sc,SkSo - Separatori:
Z,Zs,,ZlZp - Kontrola i Format:
Cc,,Cfdok drugeCkategorije prefiksa nisu podržane.
\W, \D,, \S i ne može se koristiti u negiranoj klasi \P{}[^...] karaktera. Da bi se implementirali na nekim platformama, ove negativne klase karaktera su prevedene na njihove Unicode ekvivalente što bi moglo biti teško uraditi ako se i negiraju.
Unicode znakovi između U+10000 i U+10FFFF, koji zahtevaju surogat parove, nisu podržani u klasama znakova.
Kvantifikatori
| Funkcija | Opis |
|---|---|
| Pohlepan nula ili jedan |
? poklapa se nula ili jednom, sa što većim mečem. |
| Pohlepan nula ili više |
* poklapa se nula ili više puta, sa što većim mečem. |
| Pohlepan jedan ili više |
+ poklapa se jednom ili više puta, sa što većim mečem. |
| Pohlepan barem n |
{n,} poklapa se najmanje n puta, sa što većim mečem. Na primer, a{3,} odgovara svim znakovima u aaaaa. |
| Pohlepan između n i m |
{n,m} mečevi između n i m puta, sa što većim mečem. Na primer, a{1,3} odgovara prva tri znaka aaaaa. |
| Lenja nula ili jedan |
?? mečevi nula ili jednom, sa što manjim mečem. |
| Lazi nula ili više |
*? Utakmice nula ili više puta, sa što je moguće manjim mečem. |
| Lenji jedan ili više |
+? poklapa se jednom ili više puta, sa što manjim mečem. |
| Lenji bar n |
{n,}? poklapa se najmanje n puta, sa što manjim mečem. Na primer, a{3,}? odgovara samo prva tri znaka u aaaaa. |
| Lenj između n i m |
{n,m}? mečevi između n i m puta, sa što manjim mečem. Na primer, a{1,3}? odgovara samo prvi karakter. aaaaa |
| Tačan n |
{n} poklapa se n puta, tačno. Na primer, a{3} odgovara tačno tri znaka aaaaa. |
Prisvojni kvantifikatori nisu podržani.
Mešanje podmečeva i kvantifikatora ima ograničenja. Za više informacija, pogledajte Moguće prazne pod-utakmice.
Grupe
| Funkcija | Opis |
|---|---|
| Grupiši |
( i koriste se za grupisanje elemenata za kvantifikatore ) koji će se primeniti. Na primer, (abc)+ šibice abcabc. |
| Smenjivanje |
a|b Utakmice "a" ili "b", često se koriste u grupi. |
| Imenovana podmeč i povratna referenca |
(?<name>chars) snima podmeč sa imenom name, na koji \k<name> se upućuje. Ne može da se koristi ako je MatchOptions.NumberedSubMatches omogućen. |
| Numerisana podutakmica i zadnja referenca | Kada je MatchOptions.NumberedSubMatches omogućen, (a) snima podmeč koji se odnosi sa \1. |
| Noncapture grupa |
(?:a), kreira grupu bez hvatanja rezultata kao imenovanog ili numerisanog podudaranja. Sve grupe su ne-hvatanje osim ako MatchOptions.NumberedSubMatches nije omogućeno. |
Imenovane i numerisane podutakmice ne mogu se koristiti zajedno. Po defaultu, imenovane podmečeve su omogućene i poželjne su radi jasnoće i održavanja, dok standardne grupe za hvatanje postaju grupe koje nisu za hvatanje sa poboljšanim performansama. Ovo ponašanje se može promeniti sa MatchOptions.NumberedSubMatches koji obezbeđuje tradicionalne grupe za hvatanje, ali onemogućava imenovane grupe za hvatanje. Neke implementacije tretiraju mešavinu numerisanih i imenovanih grupa za hvatanje drugačije, zbog čega Power Fx je to ne dozvoljava.
Grupe za hvatanje koje se odnose na samo referenciranje nisu podržane, na primer regularni izraz (a\1).
Dve grupe za hvatanje ne mogu da dele isto ime, na primer, regularni izraz (?<id>\w+)|(?<id>\d+) nije podržan.
Ime imenovanog podmeča mora početi sa karakterom \p{L} ili _, i može da se nastavi sa tim znakovima plus \p{Nd}. Imena su ograničena u dužini do 62 UTF-16 kodnih jedinica.
Povratne reference na eventualno prazne podmečeve i na podpodudaranja u okviru pogleda iza ili pogleda unapred takođe nisu podržane.
Neke implementacije nude opciju "eksplicitno hvatanje" za poboljšanje performansi koje su nepotrebne jer Power Fx je podrazumevano. MatchOptions.NumberedSubMatches ga onemogućava i omogućava implicitno numerisane hvatanja.
Mešanje podmečeva i kvantifikatora ima ograničenja. Pogledajte Moguće prazne podmečeve za više informacija.
komentara
| Funkcija | Opis |
|---|---|
| Inline komentari |
(?# comment here), koji se ignoriše kao komentar. Komentar se završava sledećom bliskom zagradom, čak i ako je u komentaru uvodna zagrada. |
Pogledajte MatchOptions.FreeSpacing za alternativu za formatiranje i komentarisanje regularnih izraza.
Inline opcije
| Funkcija | Opis |
|---|---|
| Inline opcije |
(?im) je isto kao i korišćenje MatchOptions.IgnoreCase i MatchOptions.Multiline. Mora biti podešen na početku regularnog izraza. |
Podržani inline modovi su [imsx]. Oni odgovaraju MatchOptions.IgnoreCase,MatchOptions.Multiline,MatchOptions.DotAll, i MatchOptions.FreeSpacing, respektivno.
n je takođe prihvaćen za kompatibilnost ali nema efekta jer je podrazumevani i nije kompatibilan sa MatchOptions.NumberedSubMatches.
Umetnute opcije ne mogu biti korišćene da se onemogući opcija ili podesite opcija za podizraz.
Opcije
Opcije podudaranja menjaju ponašanje podudaranja regularnih izraza. Postoje dva načina da se omoguće opcije, koje se mogu mešati sve dok nema konflikta:
-
MatchOptions enum vrednost prošla kao treći argument za Match, MatchAll , i IsMatch. Opcije se mogu kombinovati sa operatorom ili funkcijom
&, na primerConcatenate.MatchOptions.DotAll & MatchOptions.FreeSpacingSve funkcije regularnog izraza zahtevaju da MatchOptions je konstantna vrednost, ne može se izračunati ili sačuvati u promenljivoj. -
(?...)prefiks na samom početku regularnog izraza. Opcije se mogu kombinovati sa više slova u konstrukciji(?...), na primer(?sx). Neke opcije nemaju ekvivalent,(?...)ali mogu imati druge načine da se dobije isti efekat, na primer MatchOptions.BeginsWith je ekvivalent^na početku regularnog izraza.
Sadrži
Omogućeno sa MatchOptions.Contains bez ekvivalenta teksta regularnog izraza. MatchOptions.Contains je podrazumevani za sve funkcije izvan Power Apps; unutar Power Apps MatchOptions.Complete je podrazumevani za IsMatch.
Dovršite
Omogućeno sa MatchOptions.Complete ili koristiti ^ i $ na početku i regularnog izraza, respektivno.
BeginsWith
Omogućeno sa MatchOptions.BeginsWith ili koristiti ^ na početku i regularnog izraza.
EndsWith
Omogućeno sa MatchOptions.EndsVith ili koristiti $ na kraju regularnog izraza.
Sortiraj
Omogućeno sa MatchOptions.DotAll ili (?s) na početku regularnog izraza.
Obično operator tačke . odgovara svim znakovima osim znakova [\n\x0b\f\r\x85\u2028\u2029] nove linije. Sa modifikatorom DotAll , svi znakovi se poklapaju, uključujući i nove linije.
U ovom primeru, samo "Zdravo" se poklapa kao podrazumevano . neće odgovarati novom redu:
Trim( Match( "Hello
World", ".*" ).FullMatch )
// returns
// "Hello"
Ali ako dodamo modifikator DotAll , onda se nova linija i svi naredni znakovi poklapaju:
Trim( Match( "Hello
World", ".*", MatchOptions.DotAll ).FullMatch )
// returns
// "Hello
// World"
Slobodni razmak
Omogućeno sa MatchOptions.FreeSpacing ili (?x) na početku regularnog izraza.
Slobodni razmak olakšava čitanje i održavanje složenog regularnog izraza. Pravila su jednostavna:
- Razmak znakovi se zanemaruju u regularnom izrazu, uključujući i sve znakove koji bi se poklapali
\s. Ako je poželjno podudaranje razmaka, upotrebite\s,\,,\t,\rili\n. -
#počinje komentar koji traje do kraja reda. To i svi znakovi koji prate do sledećeg novog znaka (znakovi koji se ne poklapaju.bez MatchOptions.DotAll) se ignorišu. - Klase likova nisu uključene u ove promene. Svemirski likovi i
#ponašaju se kao i obično. Na primer,vraćaIsMatch( "a#b c", "(?x)a[ #]b[ #]c" )true. Neki jezici regularnih izraza uključuju klase znakova u slobodnom razmaku, ili pružaju opciju da ih uključe, ali Power Fx to ne čini.
Na primer, ovde je složen regularni izraz za podudaranje ISO 8601 datuma vremena:
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
A ovde je identičan regularni izraz sa slobodnim razmakom koji koristi više linija, uvlačenje za grupe i komentare regularnog izraza, čineći ovu verziju lakšom za razumevanje, validaciju i održavanje.
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
IgnoreCase
Omogućeno sa MatchOptions.IgnoreCase ili (?i) na početku regularnog izraza.
Poklapa tekst u slovu neosetljiv na velika slova: velika slova odgovaraju malim slovima i mala slova odgovaraju velikim slovima.
Na primer:
IsMatch( "HELLO!", "hello", MatchOptions.IgnoreCase )
// returns true
IsMatch( "file://c:/temp/info.txt", "^FILE://", MatchOptions.IgnoreCase )
// returns true
Većina delova ili Power Fx su svesni kulture, ali ne ovde. Korišćenje kulture invarijantnog podudaranja je industrijski standard za regularne izraze, uključujući JavaScript i Perl. To je korisno u drugom primeru gde se sistemski resurs poklapa, na primer, kultura tr-TR u kojoj I nije ekvivalent i velikih slova.
Ako je kultura svesna, potrebno je podudaranje bez razlikovanja velikih i malih slova, umesto toga koristite klasu znakova sa odgovarajućim znakovima, na primer [Hh][Ee][Ll][Ll][Oo] za prvi primer.
Više redova
Omogućeno sa MatchOptions.Multiline ili (?m) na početku regularnog izraza.
Normalno, ^ i sidra $ odgovaraju početku i ulaznog teksta. Sa modifikatorom Multiline , ova sidra odgovaraju početku i kraju linija u ulaznom tekstu, gde se svaka linija završava sa \r, \n,, \r\n ili krajem ulaza. Na primer:
MatchAll( "Hello" & Char(13) & Char(10) & "World", "^.+$" )
// returns
// "Hello"
Unapred definisani obrasci
Unapred definisani obrasci vam omogućavaju da se podudarate sa jednim od skupova znakova ili nizom od više znakova. Koristite operator string-concatenation & da kombinujete svoje tekstualne nizove sa članovima Match enum:
| Numerička vrednost Match | Opis | Regularni izraz |
|---|---|---|
| Bilo koji | Odgovara bilo kom znaku. | . |
| Zarez | Poklapa se sa zarezom ,. |
, |
| Cifra | Podudara se sa jednom cifre (0 kroz 9 i druge članove \p{Nd}). |
\d |
| E-pošta | Podudara se sa adresom e-pošte koja sadrži simbol "at" (@) i ime domena koje sadrži najmanje jednu tačku (.), razgraničenu razmakom i interpunkcijskim znakovima. |
Vidi napomenu |
| Crtica | Podudara se sa crticom. |
-
Vidi napomenu |
| Srpsko-hrvatski | Odgovara levoj zagradi (. |
\( |
| Pismo | Podudara se sa slovom. | \p{L} |
| MultipleDigits | Podudara se sa jednom ili više cifara. | \d+ |
| MultipleLetters | Podudara se sa jednim ili više slova. | \p{L}+ |
| MultipleNonSpaces | Podudara se sa jednim ili više znakova koji ne dodaju prazan prostor (a ne razmak, karticu ili novi red). | \S+ |
| MultipleSpaces | Podudara se sa jednim ili više znakova koji dodaju prazan prostor (razmak, karticu ili novi red). | \s+ |
| Pretraživanje | Podudara se sa jednim znakom koji ne dodaje prazan prostor. | \S |
| OpcionoCifre | Podudara se sa nula, jednom ili više cifara. | \d* |
| OpcionoPisma | Podudara se sa nula, jednim ili više slova. | \p{L}* |
| OpcionoNonSpaces | Podudara se sa nula, jednim ili više znakova koji ne dodaju prazan prostor. | \S* |
| OpcioniProstori | Podudara se sa nula, jednim ili više znakova koji dodaju prazan prostor. | \s* |
| Menstruacija | Podudara se sa tačkom ili tačkom .."). |
\. |
| OMILjENO | Odgovara desnoj zagradi ). |
\) |
| Prostora | Odgovara znaku koji dodaje prazan prostor. | \s |
| Kartici | Poklapa se sa znakom za tabulaciju. | \t |
Na primer, pattern "A" & Match.MultipleDigits odgovara slovu "A" praćenom jednom ili više cifara.
Obrazac Match.Email je složeniji od ostalih. Otkriva i izvlači uobičajene adrese e-pošte u obliku local@hostname.tld, verovatno iz dugih odlomaka teksta, i podržava međunarodne znakove i emotikone. Koristite ga za proveru obrasca koji uzima adresu e-pošte kao ulaz, kao brzi test da je ulaz u obrascu e-pošte. Ako ne vađenje, koristite MatchOptions.Complete da biste otkrili adresu e-pošte, na primer, u kontroli unosa teksta.
Međutim, Match.Email ne potvrđuje da je adresa e-pošte u skladu sa svim mnogim standardima koji se razvijaju za adrese e-pošte, imena domena i domene najvišeg nivoa koji bi zahtevali komplikovan regularni izraz koji bi trebalo da se ažurira s vremena na vreme. Iako se većina adresa e-pošte tretira kao što se očekivalo, Match.Email odgovara nekim nevažećim slučajevima, kao što je podvlaka u imenu domaćina, i ne odgovara nekim važećim slučajevima, kao što su citirane adrese e-pošte ili IP adrese. Ako je potrebno, na Internetu postoji mnogo regularnih izraza za otkrivanje istinski legalne adrese e-pošte. Uvek testirajte svoj regularni izraz za svoje specifične potrebe pre upotrebe u proizvodnji.
Ako želite da vidite regularni izraz koji se koristi, procenite formulu Text( Match.Email ). Prvi deo se poklapa sa znakovima pre @ i izuzim uobičajenu ASCII interpunkciju prema RFC 822, a revizije i Unicode početnu i završnu interpunkciju radi lakšeg izdvajanja, kao što su (, [, “, « i 「. Ne podržava neuobičajenu i obeshrabrenu upotrebu citiranih nizova ili komentara. Nakon toga @, drugi i treći deo regularnog izraza su isti i razdvojeni sa a ., osiguravajući da uvek postoji bar jedan . u adresi. Ovi delovi isključuju sve Unicode interpunkcije osim ., -, i _. IP adrese nisu podržane. Tokom cele adrese e-pošte podržani su međunarodni likovi i emotikoni.
U Power Apps, kada se ne koristi Power Fx 1.0,Match.Email i Match.Hyphen imaju malo drugačije definicije. Match.Email je jednostavnije, ali nije pogodno za izdvajanje adrese e-pošte jer hvata prostore. Ranije, Match.Hyphen je pobegao izvan klase karaktera koja je sada ilegalna.
NumerisaniSubMatches
Omogućeno sa MatchOptions.NumberedSubMatches bez ugrađene opcije.
(?n) je podržan kao suprotno od ove opcije za kompatibilnost i podrazumevani je.
Po defaultu, (...) ne hvata, ekvivalent onoga što većina sistema naziva "eksplicitno zarobljavanje". Da biste snimili, koristite imenovano snimanje sa (?<name>...) backreference \k<name>. Korišćenje imenovanih hvatanja poboljšava performanse tako što ne hvata grupe koje nisu potrebne, poboljšavajući jasnoću korišćenjem imena, a ne skloni greškama ako se položaj hvatanja promeni.
Ako imate postojeći regularni izraz, to može zavisiti od grupa koje su automatski zarobljene i numerisane, uključujući numerisane povratne reference. Ovo ponašanje je dostupno korišćenjem opcije MatchOptions.NumberedSubMatchs .
Imenovani i numerisani podmečevi ne mogu se koristiti zajedno. Zato što neke implementacije tretiraju mešavinu numerisanih i imenovanih grupa za hvatanje drugačije, Power Fx to ne dozvoljava.
Moguće prazne podmečeve
Kao što je navedeno u uvodu, Power Fx regularni izrazi su namerno ograničeni na funkcije koje se mogu dosledno implementirati na .NET, JavaScript i druge programske jezike regularnih izraza. Greške u vremenu autorizacije sprečavaju korišćenje funkcija koje nisu deo ovog skupa.
Jedna oblast koja može biti različita između implementacija je kako se rukuje praznim podmečevima. Na primer, razmotrite regularni izraz (?<submatch>a*)+ koji se traži da odgovara tekstu a. Na .NET-u, podmeč rezultira praznim tekstualnim nizom, dok na JavaScript-u rezultira a. Oba se mogu tvrditi kao ispravne implementacije, jer + kvantifikator može biti zadovoljan praznim nizom jer sadržaj grupe ima * kvantifikator.
Da bi se izbegli različiti rezultati u Power Fx implementacijama, podpodudaranja koja mogu biti prazna ne mogu se koristiti sa kvantifikatorom. Evo primera kako podmeč može biti prazan:
| Primeri | Opis |
|---|---|
(?<submatch>a{0,}b*)+ |
Sav sadržaj podpoklapanja je opciono, tako da ceo podmeč može biti prazan. |
((<submatch>a)?b)+ |
Zbog spoljašnjeg ? podudaranja, podmecanje u celini je opciono. |
(?<submatch>a|b*)+ |
Smenjivanje unutar podmeča sa nečim što bi moglo biti prazno može dovesti do toga da ceo podmeč bude prazan. |
((?<submatch>a)|b)+ |
Izmena izvan podmeča može da se poklapa b u kom slučaju podmeč će biti prazan. |
Podpodmeč u (?<submatch>a+)+ ne može biti prazan jer mora postojati bar jedan a u podmeču, i podržan je.
Unikod
Power Fx regularni izrazi koriste Unicode kategorije za definisanje \w, \d, i \s, sa specifičnim kategorijama dostupnim kroz. \p{..}
Ove definicije mogu se razlikovati od platforme do platforme. Na primer, Unicode standard se ažurira s vremena na vreme sa novim znakovima koji će kasnije biti implementirani od strane platformi sopstvenim tempom. Očekujte varijacije u rezultatima između platformi dok se sve platforme ne ažuriraju.
Power Fx regularni izrazi obezbeđuju da su informacije o kategoriji uvek dostupne za osnovnu višejezičnu ravan (znakovi U+0 do U+ffff). Neke platforme ne implementiraju kategorije za znakove u dodatnoj višejezičnoj ravni i šire (U+10000 do U+10ffff). Ovo ograničenje obično nije zabrinjavajuće jer se najčešće koriste likovi u osnovnom višejezičnom planu. Koristite vrednosti znakova direktno umesto kategorija ako vaš scenario uključuje znakove na ili iznad U + 10000. Testirajte svoje regularne izraze na platformama koje nameravate da koristite.
Male razlike u slučaju ivice mogu postojati između platformi. Na primer, neke platforme možda neće videti ſ kao podudaranje s kada se pozove MatchOptions.IgnoreCase . Ako su ovi znakovi važni za vaš scenario, koristite klasu karaktera kao da [ſsS] se podudaraju sa velikim i velikim slovima neosetljivo i eksplicitno uključuju željene znakove.