Nota
L'accés a aquesta pàgina requereix autorització. Pots provar d'iniciar sessió o canviar de directori.
L'accés a aquesta pàgina requereix autorització. Pots provar de canviar directoris.
Les funcionsIsMatch , Match i MatchAll s'utilitzen per extreure i validar patrons en el text. El patró que utilitzen s'anomena expressió regular.
Les expressions regulars són potents i versàtils. No obstant això, de vegades poden aparèixer com una seqüència aleatòria de signes de puntuació. Aquest article no descriu tots els aspectes de les expressions regulars, però hi ha una gran quantitat d'informació, tutorials i eines disponibles en línia.
Les expressions regulars tenen una llarga història i estan disponibles en molts llenguatges de programació. Cada llenguatge de programació té el seu propi dialecte d'expressions regulars i hi ha pocs estàndards. En la mesura del possible, ens esforcem perquè la mateixa expressió regular doni el mateix resultat en totes les Power Fx implementacions. La compatibilitat no és fàcil d'aconseguir, ja Power Fx que s'executa a sobre de JavaScript i .NET que tenen diferències significatives. Per executar-se en diferents plataformes, Power Fx les expressions regulars utilitzen un subconjunt de funcions àmpliament compatibles amb tota la indústria.
Com a resultat, algunes expressions regulars que funcionen en altres entorns poden estar bloquejades o necessitar Power Fx ajustaments. Els errors de temps de creació s'informen a mesura que es troben característiques no admeses. És per això que l'expressió regular i les opcions han de ser una constant de temps d'autoria i no dinàmiques, com ara que es proporcionen en una variable.
Nota
Power Apps Utilitza una versió anterior de Power Fx les expressions regulars, que té menys limitacions però també menys funcions. MatchOptions.DotAll i MatchOptions.FreeSpacing no estan disponibles i les definicions de Match.Email i Match.Hyphen són diferents. Els parells substituts Unicode no es tracten com un sol caràcter. MatchOptions.NumberedSubMatches és el valor per defecte. La versió de les expressions regulars descrita aquí estarà disponible pròximament Power Apps , sota un commutador de "Power Fx compatibilitat V1.0".
Funcions admeses
Power Fx admet les següents característiques d'expressió regular, amb notes sobre com Power Fx el comportament pot diferir d'altres sistemes.
L'expressió regular ha de ser constant i no calculada ni emmagatzemada en una variable. S'admeten l'operador, la & interpolació de $"{...}" cadenes i les funcions i les Concatenate funcions amb CharUniChar arguments constants.
Caràcters literals
| Característica | Descripció |
|---|---|
| Caràcters literals | Qualsevol caràcter Unicode es pot inserir directament, excepte \, [, ], ^, $.|?*+(){ i. } Quan s'utilitzen MatchOptions.FreeSpacing, #, , i altres \s caràcters d'espai s'han d'escapar, ja que tenen un significat diferent. |
| Caràcters literals escapats |
\ (barra invertida) seguit d'un dels caràcters literals directes, com per tal d'inserir \? un signe d'interrogació.
\# i \ també es pot utilitzar fins i tot quan MatchOptions.FreeSpacing està inhabilitat per coherència. |
| Codis de caràcters hexadecimals i Unicode |
\x20 amb exactament dos dígits hexadecimals, \u2028 amb exactament quatre dígits hexadecimals i es pot utilitzar per a substituts alts i baixos. |
| Punt de codi Unicode |
\u{01F47B} amb fins a vuit dígits hexadecimals. Ha d'estar en el rang de 0 a U+10FFFF i no es pot utilitzar per a un substitut alt o baix. Pot donar lloc a un parell substitut (dos caràcters) si és més gran que U+FFFF. |
| Retorn en cotxe |
\r, el mateix que Char(13). |
| Caràcter de nova línia |
\n, el mateix que Char(10). |
| Feed de formularis |
\f, el mateix que Char(12). |
| Pestanya horitzontal |
\t, el mateix que Char(9). |
Utilitzeu \x o \u en el seu lloc. Els codis octals per a caràcters, com \044 ara o no \o{044} estan permesos, perquè poden ser ambigus amb referències numerades.
\v no s'admet perquè és ambigu en tots els llenguatges d'expressions regulars. Utilitzeu-lo \x0b per a una pestanya vertical o [\x0b\f\r\n\x85\u2028\u2029] per a espais en blanc verticals.
Afirmacions
Les assercions coincideixen amb una posició concreta del text, però no consumeixen cap caràcter.
| Característica | Descripció |
|---|---|
| Inici de la línia |
^, coincideix amb l'inici del text o d'una línia si s'utilitza MatchOptions.Multiline . |
| Fi de línia |
$, coincideix amb el final del text o d'una línia si s'utilitza MatchOptions.Multiline . |
| Mirar endavant |
(?=a) i (?!a), partits per endavant per a un patró. |
| Mirar darrere |
(?<=b) i (?<!b), llumins darrere per a un patró. |
| Pauses de paraula |
\b i \B, utilitzant la definició Unicode de lletres [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]. |
$ coincideix amb el final d'una línia, incloent-hi qualsevol final \r\n, \r, o \n.
Les afirmacions lookahead i lookbehind no poden contenir subcoincidències ni quantificadors il·limitats a l'interior, i no es poden utilitzar amb un quantificador a l'exterior.
Classes de personatges
| Característica | Descripció |
|---|---|
| Punt |
., coincideix amb tot excepte \r i \n tret que s'utilitzi MatchOptions.DotAll . |
| Classe de caràcter |
[abc] llista de personatges, [a-fA-f0-9] gamma de personatges, [^a-z] tot menys aquests personatges. Les classes de caràcters no es poden imbricar, restar o intersecar, i és possible que molts signes de puntuació no apareguin dues vegades seguides (@@, %%, !!, etc.). |
| Caràcters de paraules |
\w i \W utilitzant la definició Unicode de lletres [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}].
\W no es pot utilitzar en una classe de caràcters negatius. |
| Caràcters de dígits |
\d inclou els dígits a 0 i,coincideix9\p{Nd} amb tot excepte els caràcters \D que coincideixen per \d.
\D no es pot utilitzar en una classe de caràcters negatius. |
| Caràcters espacials |
\s inclou caràcters [ \t\n\x0b\f\r\x85\u2028\u2029\p{Z}] d'espaiat, que coincideixen amb tot, \S excepte els caràcters que coincideixen per \s.
\S no es pot utilitzar en una classe de caràcters negatius. |
| Categoria de caràcters Unicode |
\p{Ll} coincideix amb totes les lletres minúscules Unicode, mentre que \P{Ll} coincideix amb tot el que no és una lletra minúscula Unicode.
\P{} no es pot utilitzar en una classe de caràcters negatius. |
Per augmentar la claredat i evitar l'ambigüitat, les classes de caràcters entre claudàtors són més restrictives que en altres llenguatges d'expressions regulars:
- Els caràcters literals del guió s'han d'escapar. Utilitzeu
[\-a]en lloc de[-a]coincidir-oa. - Els claudàtors inicials s'han d'escapar. Utilitzeu
[\[a]en lloc de[[]coincidir[oa. - A menys que sigui el primer caràcter i indiqui negació, el caràcter s'ha d'escapar. Utilitzeu
[a\^]en lloc de[a^]coincidir^oa. - S'han d'escapar les claus. Utilitzeu-lo
[\{\}]per fer coincidir{o}. - No s'admet la classe
[]de caràcters buida. Per incloure un claudàtor de tancament en una classe de caràcters, escapeu-lo.
Categories de caràcters Unicode compatibles amb \p{} i \P{}:
- Lletres:
L,Lu,Ll,,Lt,LmLo - Marques:
M,Mn,,McMe - Números:
N,Nd,Nl,No - Puntuació:
P,Pc,Pd,,Ps,Pe,PiPfPo - Símbols:
S,Sm,,Sc,SkSo - Separadors:
Z,Zs,,ZlZp - Control i Format:
Cc,Cf, mentre que no s'admeten altresCcategories de prefix.
\W, \D,, i \Sno es pot utilitzar dins d'una classe \P{} de [^...] caràcter negada. Per tal de ser implementades en algunes plataformes, aquestes classes de caràcters negatius es tradueixen als seus equivalents Unicode, cosa que podria ser difícil de fer si també es nega.
Els caràcters Unicode entre U+10000 i U+10FFFF, que requereixen parells substituts, no s'admeten a les classes de caràcters.
Quantificadors
| Característica | Descripció |
|---|---|
| Cobdiciós zero o un |
? coincideix amb zero o una vegada, amb una coincidència tan gran com sigui possible. |
| Cobdiciós zero o més |
* coincidències zero o més vegades, amb una coincidència tan gran com sigui possible. |
| Cobdiciós un o més |
+ coincidències una o més vegades, amb una coincidència tan gran com sigui possible. |
| Cobdiciós com a mínim n |
{n,} coincideix almenys n vegades, amb una coincidència tan gran com sigui possible. Per exemple, a{3,} coincideix amb tots els caràcters aaaaa. |
| Cobdiciós entre n i m |
{n,m} coincidències entre n i m vegades, amb una coincidència tan gran com sigui possible. Per exemple, a{1,3} coincideix amb els tres primers caràcters de aaaaa. |
| Mandrós zero o un |
?? coincideix amb zero o una vegada, amb una coincidència tan petita com sigui possible. |
| Mandrós zero o més |
*? coincidències zero o més vegades, amb una coincidència tan petita com sigui possible. |
| Mandrós un o més |
+? coincidències una o més vegades, amb una coincidència tan petita com sigui possible. |
| Mandrós com a mínim n |
{n,}? coincidències almenys n vegades, amb una coincidència tan petita com sigui possible. Per exemple, a{3,}? només coincideix amb els tres primers caràcters aaaaa. |
| Mandrós entre n i m |
{n,m}? coincidències entre n i m vegades, amb una coincidència tan petita com sigui possible. Per exemple, a{1,3}? només coincideix amb el primer caràcter de aaaaa. |
| N exacte |
{n} coincideix amb n vegades, exactament. Per exemple, a{3} coincideix exactament amb tres caràcters de aaaaa. |
No s'admeten quantificadors possessius.
La barreja de subcoincidències i quantificadors té limitacions. Per obtenir més informació, vegeu Possiblement subcoincidències buides.
Grups
| Característica | Descripció |
|---|---|
| Agrupa |
( i ) s'utilitzen per agrupar elements per a l'aplicació de quantificadors. Per exemple, (abc)+ coincidències abcabc. |
| Alternança |
a|b coincideix amb "a" o "b", sovint utilitzat en grup. |
| Subcoincidència amb nom i referència posterior |
(?<name>chars) captura una subcoincidència amb el nom name, referenciat amb \k<name>. No es pot utilitzar si MatchOptions.NumberedSubMatches està habilitat. |
| Subcoincidència numerada i referència posterior | Quan MatchOptions.NumberedSubMatches està habilitat, (a) captura una subcoincidència amb \1 la qual es fa referència. |
| Grup de no captura |
(?:a), crea un grup sense capturar el resultat com a subcoincidència amb nom o numeració. Tots els grups no capturen tret que MatchOptions.NumberedSubMatches estigui habilitat. |
Les subcoincidències amb nom i numeració no es poden utilitzar juntes. Per defecte, les subcoincidències amb nom estan habilitades i es prefereixen per a la claredat i el manteniment, mentre que els grups de captura estàndard es converteixen en grups sense captura amb un rendiment millorat. Aquest comportament es pot canviar amb MatchOptions.NumberedSubMatches que proporciona grups de captura tradicionals però inhabilita els grups de captura amb nom. Algunes implementacions tracten una barreja de grups de captura numerats i amb nom de manera diferent, per la qual cosa Power Fx no ho permet.
No s'admeten els grups de captura d'autoreferència, per exemple, l'expressió (a\1) regular.
Dos grups de captura no poden compartir el mateix nom, per exemple, l'expressió (?<id>\w+)|(?<id>\d+) regular no és compatible.
El nom d'una subcoincidència amb nom ha de començar amb un \p{L} caràcter o _ i pot continuar amb aquests caràcters plus \p{Nd}. Els noms tenen una longitud limitada a 62 unitats de codi UTF-16.
Tampoc s'admeten referències inverses a possibles subcoincidències buides i a subcoincidències dins d'una mirada enrere o cap endavant.
Algunes implementacions ofereixen una opció de "captura explícita" per millorar el rendiment, que és innecessària ja Power Fx que és la predeterminada. MatchOptions.NumberedSubMatches el desactiva i habilita les captures numerades implícitament.
La barreja de subcoincidències i quantificadors té limitacions. Vegeu Subcoincidències possiblement buides per a més informació.
Comentaris
| Característica | Descripció |
|---|---|
| Comentaris en línia |
(?# comment here), que s'ignora com a comentari. El comentari acaba amb el següent parèntesi tancat, fins i tot si hi ha un parèntesi d'obertura al comentari. |
Vegeu MatchOptions.FreeSpacing per obtenir una alternativa per donar format i comentar expressions regulars.
Opcions en línia
| Característica | Descripció |
|---|---|
| Opcions en línia |
(?im) és el mateix que utilitzar MatchOptions.IgnoreCase i MatchOptions.Multiline. S'ha d'establir al començament de l'expressió regular. |
Els modes en línia admesos són [imsx]. Corresponen a MatchOptions.IgnoreCase,MatchOptions.Multiline,MatchOptions.DotAll i MatchOptions.FreeSpacing, respectivament.
n també s'accepta per compatibilitat, però no té cap efecte, ja que és el valor predeterminat i és incompatible amb MatchOptions.NumberedSubMatches.
Les opcions en línia no es poden utilitzar per inhabilitar una opció o definir una opció per a una subexpressió.
Opcions
Les opcions de coincidència canvien el comportament de la coincidència d'expressions regulars. Hi ha dues maneres d'habilitar les opcions, que es poden barrejar sempre que no hi hagi conflicte:
-
Valor d'enumeració de MatchOptions passat com a tercer argument a Match,MatchAll i IsMatch. Les opcions es poden combinar amb l'operador o
&laConcatenatefunció, per exempleMatchOptions.DotAll & MatchOptions.FreeSpacing. Totes les funcions d'expressió regular requereixen que MatchOptions sigui un valor constant, no es pot calcular ni emmagatzemar en una variable. -
(?...)prefix al principi de l'expressió regular. Les opcions es poden combinar amb diverses lletres de la(?...)construcció, per exemple(?sx). Algunes opcions no tenen un(?...)equivalent, però poden tenir altres maneres d'obtenir el mateix efecte, per exemple , MatchOptions.BeginsWith és l'equivalent de^al començament de l'expressió regular.
Conté
Habilitat amb MatchOptions.Contains sense un equivalent de text d'expressió regular. MatchOptions.Contains és el valor per defecte per a totes les funcions fora de Power Apps; dins Power Apps de MatchOptions.Complete és el valor per defecte per a IsMatch.
Complet
Habilitat amb MatchOptions.Complete o use ^ i $ al principi i de l'expressió regular, respectivament.
BeginsWith
Habilitat amb MatchOptions.BeginsWith o s'utilitza ^ al principi i de l'expressió regular.
EndsWith
Habilitat amb MatchOptions.EndsWith o s'utilitza $ al final de l'expressió regular.
DotAll
Habilitat amb MatchOptions.DotAll o (?s) al començament de l'expressió regular.
Normalment l'operador de punt . coincideix amb tots els caràcters excepte els caràcters [\n\x0b\f\r\x85\u2028\u2029] de nova línia. Amb el modificador DotAll , tots els caràcters coincideixen, incloses les noves línies.
En aquest exemple, només es coincideix amb "Hola", ja que per defecte no . coincidirà amb la nova línia:
Trim( Match( "Hello
World", ".*" ).FullMatch )
// returns
// "Hello"
Però si afegim el modificador DotAll , llavors la nova línia i tots els caràcters posteriors coincideixen:
Trim( Match( "Hello
World", ".*", MatchOptions.DotAll ).FullMatch )
// returns
// "Hello
// World"
Espaiat lliure
Habilitat amb MatchOptions.FreeSpacing o (?x) al començament d'una expressió regular.
L'espaiat lliure facilita la lectura i el manteniment d'una expressió regular complexa. Les regles són senzilles:
- Els caràcters d'espai s'ignoren a l'expressió regular, inclosos tots els caràcters que coincideixen
\s. Si es vol fer coincidir un espai, utilitzeu\s,\,\t,\r, o\n. -
#comença un comentari que s'estén fins al final de la línia. S'ignoren tots els caràcters que segueixen al següent caràcter de nova línia (caràcters que no coincideixen sense.MatchOptions.DotAll). - Les classes de personatges no s'inclouen en aquests canvis. Espaiar els personatges i
#actuar com ho fan normalment. Per exemple, retornaIsMatch( "a#b c", "(?x)a[ #]b[ #]c" )true . Alguns llenguatges d'expressions regulars inclouen classes de caràcters en espaiat lliure o proporcionen una opció per incloure-les, però Power Fx no ho fa.
Per exemple, aquí hi ha una expressió regular complexa per fer coincidir una data i hora ISO8601:
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 aquí hi ha l'expressió regular idèntica amb espaiat lliure utilitzant diverses línies, sagnat per a grups i comentaris d'expressions regulars, fent que aquesta versió sigui més fàcil d'entendre, validar i mantenir.
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
Ignora el cas
Habilitat amb MatchOptions.IgnoreCase o (?i) a l'inici d'una expressió regular.
Coincideix amb el text d'una lletra que no distingeix entre majúscules i minúscules: les lletres majúscules coincideixen amb les minúscules i les minúscules coincideixen amb les majúscules.
Per exemple:
IsMatch( "HELLO!", "hello", MatchOptions.IgnoreCase )
// returns true
IsMatch( "file://c:/temp/info.txt", "^FILE://", MatchOptions.IgnoreCase )
// returns true
La majoria de les parts o Power Fx són conscients de la cultura, però no aquí. L'ús de la coincidència d'invariants culturals és l'estàndard de la indústria per a expressions regulars, incloent-hi JavaScript i Perl. És útil en el segon exemple en què es fa coincidir un recurs del sistema, per exemple, en la tr-TR cultura on I no és l'equivalent en majúscules de i.
Si es necessita una coincidència que no distingeix entre majúscules i minúscules i cultura, utilitzeu la classe characters amb els caràcters coincidents, per exemple [Hh][Ee][Ll][Ll][Oo] per al primer exemple.
Multilínia
Habilitat amb MatchOptions.Multiline o (?m) al començament d'una expressió regular.
Normalment, ^ i $ les àncores coincideixen amb l'inici i el text d'entrada. Amb el modificador Multiline , aquests ancoratges coincideixen amb l'inici i el final de les línies del text d'entrada, on cada línia acaba amb \r, \n, \r\n, o el final de l'entrada. Per exemple:
MatchAll( "Hello" & Char(13) & Char(10) & "World", "^.+$" )
// returns
// "Hello"
Patrons predefinits
Els patrons predefinits us permeten fer coincidir un d'un conjunt de caràcters o una seqüència de diversos caràcters. Utilitzeu l'operador de concatenació de cadenes& per combinar les cadenes de text amb els membres de l'enumeració Match :
| Enumeració de coincidència | Descripció | Expressió regular |
|---|---|---|
| Qualsevol | Coincideix amb qualsevol caràcter. | . |
| Coma | Coincideix amb una coma ,. |
, |
| Dígit | Coincideix amb un sol dígit (0 a través 9 i altres membres de \p{Nd}). |
\d |
| Correu electrònic | Coincideix amb una adreça de correu electrònic que conté un símbol "at" (@) i un nom de domini que conté almenys un punt (.), delimitat per espais en blanc i caràcters de puntuació. |
Vegeu la nota |
| Guionet | Coincideix amb un guió. |
-
Vegeu la nota |
| Paren esquerre | Coincideix amb un parèntesi esquerre (. |
\( |
| Lletra | Coincideix amb una lletra. | \p{L} |
| Dígits múltiples | Coincideix amb un o més dígits. | \d+ |
| Lletres múltiples | Coincideix amb una o més lletres. | \p{L}+ |
| MultipleNonSpaces | Coincideix amb un o més caràcters que no afegeixen un espai en blanc (que no siguin espai, tabulador ni salt de línia). | \S+ |
| Espais múltiples | Coincideix amb un o més caràcters que afegeixen un espai en blanc (espai, tabulador o salt de línia). | \s+ |
| No Espai | Coincideix amb un únic caràcter que no afegeix un espai en blanc. | \S |
| Dígits opcionals | Coincideix amb cap, un o més dígits. | \d* |
| Cartes opcionals | Coincideix amb cap, una o més lletres. | \p{L}* |
| OpcionalNonSpaces | Coincideix amb cap, un o més caràcters que no afegeixen un espai en blanc. | \S* |
| Espais opcionals | Coincideix amb cap, un o més caràcters que afegeixen un espai en blanc. | \s* |
| Període | Coincideix amb un punt o punt .."). |
\. |
| Dreta | Coincideix amb un parèntesi ) dret. |
\) |
| Espai | Coincideix amb un caràcter que afegeix un espai en blanc. | \s |
| Pestanya | Coincideix amb un caràcter de tabulació. | \t |
Per exemple, el patró "A" i Match.MultipleDigits coincideix amb la lletra "A" seguida d'un o més dígits.
El patró Match.Email és més complex que la resta. Detecta i extreu adreces de correu electrònic habituals en el formulari local@hostname.tld, possiblement de llargs passatges de text, i admet caràcters internacionals i emojis. Utilitzeu-lo per validar un formulari que prengui una adreça de correu electrònic com a entrada, com a prova ràpida que l'entrada es troba en un formulari de correu electrònic. Si no esteu extreure, utilitzeu MatchOptions.Complete per detectar una adreça electrònica, per exemple, en un control d'entrada de text.
No obstant això, Match.Email no valida que l'adreça de correu electrònic s'ajusti a tots els estàndards en evolució per a adreces de correu electrònic, noms de domini i dominis de nivell superior que requeririen una expressió regular complicada que s'hauria d'actualitzar de tant en tant. Tot i que la majoria d'adreces electròniques es tracten com s'esperava Match.Email coincideix amb alguns casos no vàlids, com ara un guió baix al nom de l'amfitrió, i no coincideix amb alguns casos vàlids, com ara adreces electròniques o adreces IP citades. Si cal, hi ha moltes expressions regulars al web per detectar una adreça de correu electrònic realment legal. Proveu sempre la vostra expressió regular per a les vostres necessitats específiques abans d'utilitzar-la en producció.
Si voleu veure l'expressió regular utilitzada, avalueu la fórmula Text( Match.Email ). La primera part coincideix amb els caràcters anteriors a @ i exclou la puntuació ASCII comuna segons RFC 822 i les revisions i la puntuació Unicode inicial i final per a una extracció més fàcil, com ara (, [, “, « i 「. No admet l'ús poc comú i desaconsellat de cadenes o comentaris citats. A continuació @, la segona i la tercera part de l'expressió regular són les mateixes i separades per a ., assegurant que sempre n'hi ha almenys una . a l'adreça. Aquestes parts exclouen tota puntuació Unicode excepte i ., -, i _. No s'admeten adreces IP. A tota l'adreça de correu electrònic, s'admeten caràcters internacionals i emojis.
In Power Apps, quan no s'utilitza Power Fx 1.0,Match.Email i Match.Hyphen tenen definicions lleugerament diferents. Match.Email és més senzill, però no és adequat per extreure una adreça de correu electrònic, ja que captura espais. Anteriorment, Match.Hyphen s'escapava fora d'una classe de caràcter que ara és il·legal.
Subcoincidències numerades
Habilitat amb MatchOptions.NumberedSubMatches sense opció en línia.
(?n) s'admet com a oposat a aquesta opció per a la compatibilitat i és la predeterminada.
Per defecte, (...) no captura, l'equivalent al que la majoria dels sistemes anomenen "captura explícita". Per capturar, utilitzeu una captura amb nom amb (?<name>...) referència \k<name>. L'ús de captures amb nom millora el rendiment en no capturar grups que no són necessaris, millorar la claredat mitjançant l'ús de noms i no ser propens a errors si canvia la posició de les captures.
Si ja teniu una expressió regular, pot dependre que els grups es capturin automàticament i es numerin, incloses les referències numerades. Aquest comportament està disponible mitjançant l'opció MatchOptions.NumberedSubMatchs .
Les subcoincidències amb nom i numerades no es poden utilitzar juntes. Com que algunes implementacions tracten una barreja de grups de captura numerats i amb nom de manera diferent, Power Fx no ho permet.
Possiblement subcoincidències buides
Com s'indica a la introducció, Power Fx les expressions regulars es limiten intencionadament a característiques que es poden implementar de manera coherent en .NET, JavaScript i altres motors d'expressions regulars de llenguatge de programació. Els errors en temps de creació impedeixen utilitzar característiques que no formen part d'aquest conjunt.
Una àrea que pot ser diferent entre implementacions és com es gestionen les subcoincidències buides. Per exemple, considereu l'expressió (?<submatch>a*)+ regular que es demana que coincideixi amb el text a. A .NET, la subcoincidència dóna com a resultat una cadena de text buida, mentre que a JavaScript dóna com a resultat a. Ambdues es poden argumentar com a implementacions correctes, ja que el + quantificador es pot satisfer amb una cadena buida ja que el contingut del grup té un * quantificador.
Per evitar resultats diferents entre Power Fx implementacions, les subcoincidències que poden estar buides no es poden utilitzar amb un quantificador. Aquests són exemples de com una subcoincidència pot estar buida:
| Exemples | Descripció |
|---|---|
(?<submatch>a{0,}b*)+ |
Tot el contingut de la subcoincidència és opcional, de manera que tota la subcoincidència pot estar buida. |
((<submatch>a)?b)+ |
A causa de l'exterior ? de la subcoincidència, la subcoincidència en conjunt és opcional. |
(?<submatch>a|b*)+ |
L'alternança dins de la subcoincidència amb alguna cosa que podria estar buida podria provocar que tota la subcoincidència estigués buida. |
((?<submatch>a)|b)+ |
L'alternança fora de la subcoincidència podria coincidir b , en aquest cas la subcoincidència estaria buida. |
La subcoincidència no (?<submatch>a+)+ pot estar buida perquè n'hi ha d'haver almenys una a a la subcoincidència i és compatible.
Unicode
Power Fx Les expressions regulars utilitzen categories Unicode per definir \w,, i \d, amb categories específiques disponibles a través de \s\p{..}.
Aquestes definicions poden variar segons les plataformes. Per exemple, l'estàndard Unicode s'actualitza de tant en tant amb nous caràcters que posteriorment seran implementats per les plataformes al seu propi ritme. Espereu variacions en els resultats entre plataformes fins que totes les plataformes estiguin actualitzades.
Power Fx les expressions regulars asseguren que la informació de la categoria estigui sempre disponible per al pla multilingüe bàsic (caràcters U+0 a U+ffff). Algunes plataformes no implementen categories per als caràcters del pla multilingüe suplementari i més enllà (U+10000 a U+10ffff). Aquesta limitació no sol ser una preocupació, ja que els caràcters del pla multilingüe bàsic són els més utilitzats. Utilitzeu els valors dels caràcters directament en lloc de les categories si el vostre escenari inclou caràcters a U+10000 o més enllà. Proveu les vostres expressions regulars a les plataformes que voleu utilitzar.
Poden existir petites diferències entre plataformes. Per exemple, és possible que algunes plataformes no es vegin ſ com a coincidència s quan s'invoca MatchOptions.IgnoreCase . Si aquests caràcters són importants per al vostre escenari, utilitzeu una classe de caràcters que [ſsS] coincideixi sense distingir entre majúscules i minúscules i inclogui explícitament els caràcters desitjats.