Expressió regular
De Viquipèdia
En informàtica una expressió regular és una cadena que es fa servir per a cercar una frase d'entre un conjunt que responen a una determinada sintaxi.
La cadena fa ús de caràcters que tenen un significat especial. La resta de caràcters i els caràcters especials precedits per una barra invertida \ constitueixen els termes del vocabulari.
[edita] Construccions bàsiques
- seqüència
- (simple juxtaposició de caràcters) ab := 'a' seguit de 'b'
- alternativa o conjunt unió |
- a|b := designa les frases 'a', 'b'
- opcionalitat del caràcter o grup precedent ?
- ab? := designa les frases a, ab
- repetició (un o més) +
- ab+ := designa ab, abb, abbb, abbbb, ...
- repetició (zero o més) *
- ab* := designa a, ab, abb, abbb, ...
- repetició {mínim, màxim}
- ab{2,3} := designa abb i abbb
- repetició {nombre exacte}
- ab{2} := designa abb
- repetició tant o més {mínim,}
- ab{2,} := designa abb, abbb, abbbb, ...
- a l'inici ^
- ^ab := ab a l'inici de frase
- al final $
- ab$ := ab a final de frase
- qualsevol caràcter .
- el punt indica qualsevol caràcter excepte salt de línia
- un caràcter entre els especificats [abc]
- [abc] := designa les frases d'un sol caràcter a, b, c
- un caràcter en un rang [a-z]
- [a-z] := designa les frases d'un sol caràcter alfabètic anglosaxó en minúscula
- unió de classes [abcA-C]
- [abcA-C] := [abc] | [A-C]
- classe negada [^ ]
- [^abc] := qualsevol caràcter excepte [abc]
- caràcter especial com a terme (signe d' escapament o trenca seqüència) \
- \( := '('
- agrupació amb captura de text ( )
- (ab)+ := ab, abab, ababab, abababab, ...
- text capturat \1 \2 .. \9
- <([a-z][a-z0-9]*)[^>]*>([^<]*)</\1> := reconeix un etiquetat ML amb etiqueta de tancament igual a la d'inici
[edita] Voracitat: minimitzar repeticions
El signe ? després dels signes de repetició ? * + indica que el patró s'ha de satisfer amb el menor nombre de repeticions possible (desganat), en comptes del comportament habitual contrari (voraç, ang:greedy).
[edita] Sequències d'escapament
- \n
- Salt de línia
- \t
- Tabulador horitzontal
- \r
- Salt de carro
- \f
- Salt de pàgina
- \v
- Tabulador vertical
- \s
- espaiat: [ \n\t\r\f\v]
[edita] Expressions Posix
- símbols multi-caràcter en una classe [. .]
- [a-c[.ch.]d-z] := inclou la ch castellana en una classe alfabet
- classe de caràcters equivalents en la ordenació local [= =]
- d [ [=e=] ] u és el mateix que d[eéè]u
- [:digit:]
- [0-9]
- [:alnum:]
- caràcters alfanumèrics segons localització (LOCALE) actual
- [:alpha:]
- caràcters alfabètics segons localització (LOCALE) actual
- [:blank:]
- espai, tabulador
- [:xdigit:]
- [0-9A-Fa-f]
- [:punct:]
- Símbols de puntuació . , " ' ? ! ; :
- [:print:]
- Qualsevol caràcter imprimible
- [:space:]
- [ \t\r\n\v\f].
- [:graph:]
- caràcters gràfics (visibles): exclou [:space:].
- [:upper:]
- majúscules segons localització (LOCALE) actual
- [:lower:]
- minúscules segons localització (LOCALE) actual
- [:cntrl:]
- Caràcters de control
[edita] Expressions Perl
- \d
- dígit
- \D
- no dígit
- \s
- espai (qualsevol espaiat: espai tabulador salt de línia)
- \S
- no espai
- \w
- [a-zA-Z_]
- \W
- [^a-zA-Z_]
- \b
- límit de paraula
- \B
- no límit de paraula
- \A
- inici de text, similar a ^ però independent de modificador multilínia
- \z
- fi de text, similar a $ però independent de modificador multilínia
- \Z
- fi de text o abans de fi de línia al final (independent de modificador multilínia)
- \G
- quan hi ha múltiples ocurrències en el text, inici de text a partir del final de la ocurrència anterior (només en cerques múltiples)
[edita] Modificadors Perl
- i
- insensible a caixa (afecta majúscules i minúscules indistintament)
- m
- multilínia: normalment els símbols ^ i $ designen l'inici de text i fí de text encara que hi hagi salts de línia. Amb aquest modificador ^ es reconeixerà a tots els inicis de línia i $ a tots els finals de línia.
- s
- punt-tot: normalment el punt reconeix qualsevol caràcter excepte un salt de línia. Amb aquest modificador reconeixerà també els salts de línia.
- x
- estès: amb aquest modificador s'ignoraràn els espais que no estiguin precedits d'escapament o no estiguin en una classe (entre claus rectangulars [])
- g
- global: cerca múltiple.
[edita] Activació de modificadors Perl
- (?i)
- activa el modificador i
- (?-i)
- desactiva el modificador i
- (?i-sm)
- activa l'i i desactiva els s i m
- (?i-sm:regexp)
- activa l'i i desactiva els s i m només en aplicar regexp
[edita] Assercions
- (?=regexp)
- mira-endavant positiu: comprova, sense avançar, que els caràcters següents corresponguin a regexp
- (?!regexp)
- mira-endavant negatiu: ... que els caràcters següents NO corresponguin a regexp
- (?<=regexp)
- mira-enrera positiu: ... que els caràcters anteriors corresponguin a regexp
- (?<!regexp)
- mira-enrera negatiu: ... que els caràcters anteriors NO corresponguin a regexp
[edita] Condicionals
- (?(?=regexp)then|else)
- si el mira-endavant té èxit comprova then sinó else
- (?(1)then|else)
- Si el grup 1 és reconegut, comprova then sinó else
[edita] Subexpressions amb nom
- (?<nom>regexp)
- reconeix la subexpressió i li assigna un nom
- (?>nom)
- aplica la subexpressió definida per nom (evita la repetició de patrons)
[edita] Recursiu, Comentari, Grup sense captura de text
- (?R)
- recursiu, aplicar el patró complet recursivament en aquest punt
- (?#comentari)
- comentari
- (?:regexp)
- grup sense captura que no compta en la numeració dels grups
[edita] Particularitats del llenguatge Java
En escriure una expressió regular en una cadena literal Java cal doblar les barres inverses ja que interpreta la barra inversa com un signe d' escapament.
String regexString = "\\s"; // expressió regular \s
[edita] Particularitats del llenguatge PHP
- Si la cadena està delimitada per dobles cometes o és dins un heredoc (document aquí mateix) la barra inversa s'interpreta com el signe d' escapament i cal doblarles
- Si la cadena està delimitada per cometes senzilles (apòstrofs) no es processa i no cal doblar les barres inverses
Les següents expressions són equivalents
$regexp1 = "\\s" ; $regexp2 = '\s' ; // heredoc $regexp3 =<<<EOD \\s EOD;
[edita] Enllaços externs
[edita] segons llenguatge
- Expressions regulars en Unix (anglès)
- Expressions regulars del Perl (anglès)
- Expressions regulars en PHP (anglès)
- Expressions regulars en Java (anglès)
- Expressions regulars en Javascript de Mozilla (anglès)
- Expressions regulars en Python (anglès)
- Expressions regulars en .NET (anglès)
- Expressions regulars en Jscript de Microsoft (anglès)
[edita] altres
- Info d'expressions regulars (anglès)
- Tests de referència de biblioteques RegExp en Java (anglès)
- Validador en-línia d'expressions regulars amb PHP (anglès)
- Validador en-línia d'expressions regulars amb java.util.regex
- Validador en-línia d'expressions regulars amb .NET (anglès)
- Guia d'expressions regulars per a .NET

