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.

Taula de continguts

[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

[edita] altres