Vous êtes sur la page 1sur 8

Expresiones regulares en PHP

Las expresiones regulares permiten definir patrones de coincidencia y aplicarlas a cadenas de texto para saber si la cadena (o parte de ella) cumple el patrn e incluso realizar transformaciones de la cadena. En PHP existen dos sistemas de expresiones regulares:
y

Expresiones regulares POSIX extendido: o Introducidas en PHP 2.0b7 en 1996, y consideras obsoletas a partir de PHP 5.3.0 (junio de 2009). o Siguen la recomendacin POSIX 1003.2. POSIX (Portable OperatingSystem Interface) es un conjunto de normas redactadas por el IEEE (TheInstitute of Electrical and ElectronicsEngineers) que definen la API de Unix. o Las funciones correspondientes empiezan por "ereg". Expresiones regulares compatibles con Perl (en ingls, PCRE): o Introducidas en PHP 4.2.0 en 2002. o Siguen la sintaxis y semnticas del lenguaje de programacin Perl 5. PHP 4.2.0 y posteriores incluyen la biblioteca de cdigo libre escrita en C PCRE (Perl Compatible Regular Expressions). o Las funciones correpondientes empiezan por "preg".

Dado que las funciones ereg (POSIX extendido) se consideran obsoletas a partir de PHP 5.3.0 (publicado en junio de 2009), se recomienda utilizar nicamente las funciones preg (PCRE).

Expresiones regulares compatibles con Perl


Funciones de expresiones regulares compatibles con Perl
La funcin de expresiones regulares compatibles con Perl preg_match($patron, $cadena [, $matriz_coincidencias [, $modificadores [, $desplazamiento]]]) compara una cadena con un patrn y devuelve 1 si el patrn ha coincidido o 0 si no. La primera coincidencia encontrada se puede guardar en el argumento opcional $matriz_coincidencias y, si se aade el modificador PREG_OFFSET_CAPTURE, se guarda tambin en el argumento opcional $matriz_coincidencias la posicin de la coincidencia encontrada. El argumento opcional $desplazamiento es un nmero que permite indicar en qu carcter se inicia la bsqueda. Los patrones deben empezar y acabar con el carcter / (barra).
<?php $cadena1 = "1234567"; $cadena2 = "abcdefg"; $patron = "/^[[:digit:]]+$/";

La cadena 1234567 son slo nmeros. La cadena abcdefg no son slo

if (preg_match($patron, $cadena1)) { print "<p>La cadena $cadena1 son slo nmeros.</p>\n"; } else { print "<p>La cadena $cadena1 no son slo nmeros.</p>\n"; } if (preg_match($patron, $cadena2)) { print "<p>La cadena $cadena2 son slo nmeros.</p>\n"; } else { print "<p>La cadena $cadena2 no son slo nmeros.</p>\n"; } ?>

nmeros.

La funcin preg_match() distingue entre maysculas y minsculas. Para que no distinga, debe aadirse el modificador "i" (sin comillas) al final del patrn. Este modificador no afecta las clases [[::]].
<?php $cadena = "aaAA"; $patron1 = "/^[a-z]+$/"; $patron2 = "/^[a-z]+$/i"; if (preg_match($patron1, $cadena)) { print "<p>La cadena $cadena son slo letras minsculas.</p>\n"; } else { La cadena aaAA no son slo print "<p>La cadena $cadena no son slo letras letras minsculas. minsculas.</p>\n"; La cadena aaAA son slo letras }

minsculas o maysculas.

if (preg_match($patron2, $cadena)) { print "<p>La cadena $cadena son slo letras minsculas o maysculas.</p>\n"; } else { print "<p>La cadena $cadena no son slo letras minsculas o maysculas.</p>\n"; } ?>

La funcin de expresiones regulares compatibles con Perl preg_match_all($patron, $cadena [, $matriz_coincidencias [, $modificadores [, $desplazamiento]]]) compara una cadena con un patrn y devuelve el nmero de coincidencias encontradas. Las coincidencias encontradas se pueden guardar en el argumento opcional $matriz_coincidencias y, si se aade el modificador PREG_OFFSET_CAPTURE, se guardan tambin en el argumento opcional $matriz_coincidencias la posicin de cada coincidencia encontrada. El argumento opcional $desplazamiento es un nmero que permite indicar en qu carcter se inicia la bsqueda.

Array ( [0] =>Array ( [0] =>Array ( <?php $cadena = "Esto es una cadena de prueba"; $patron = "/de/"; $encontrado = preg_match_all($patron, $cadena, $coincidencias, PREG_OFFSET_CAPTURE); if ($encontrado) { print "<pre>"; print_r($coincidencias); print "</pre>\n"; print "<p>Se han encontrado $encontrado coincidencias.</p>\n"; foreach ($coincidencias[0] as $coincide) { print "<p>Cadena: '$coincide[0]' - Posicin: $coincide[1]</p>\n"; } } else { print "<p>No se han encontrado coincidencias.</p>\n"; } ?> [0] => de [1] => 14 ) [1] =>Array ( [0] => de [1] => 19 ) ) )

Se han encontrado 2 coincidencias. Cadena: 'de' - Posicin: 14 Cadena: 'de' - Posicin: 19 Faltan las funciones de bsqueda y sustitucin

Sintaxis de las expresiones regulares compatibles con Perl


Los patrones de las expresiones reguladores compatibles con Perl deben empezar y acabar con un delimitador, que normalmente es la barra (/). En caso de que la barra forme parte del patrn, se puede:
y y

escribir en el patrn la barra precedida de una contrabarra (\/) utilizar otro carcter, que no sea uno de los caracteres especiales, como delimitador (por ejemplo, !, -, etc.)

Los patrones de expresiones regulares compatibles con Perl admiten modificadores, que se incluyen en el patrn, despus del limitador final.

Los siguientes patrones son comunes a POSIX extendido y a compatibles con Perl, con una diferencia muy importante que es que las clases de carcter que incluyen caracteres alfabticos ([[:alnum:]], [[:alpha:]], etc.) en POSIX no incluyen vocales acentuadas, , , etc, mientras que en PECR s. Patrn c . ^c c$ c+ c* c? \n \t \ (cd) c|d c{n} c{n,} c{n,m} [a-z] [A-Z] [0-9] [cde] [c-f] [^c] carcter c cualquier carcter empezar por el carcter c terminar por el carcter c 1 o ms caracteres c 0 o ms caracteres c 0 o 1 caracteres c nueva lnea tabulador escape, para escribir delante de caracteres especiales: ^ . [ ] % ( ) | * ? { } \ caracteres c y d agrupados carcter c o d n veces el carcter c n o ms caracteres c desde n hasta m caracteres c cualquier letra minscula cualquier letra mayscula cualquier dgito cualquiera de los caracteres c, d o e cualquier letra entre c y f (es decir, c, d, e o f) que no est el carcter c Significado

[[:alnum:]] cualquier letra o dgito [[:alpha:]] cualquier letra [[:digit:]] cualquier dgito [[:lower:]] cualquier letra minscula [[:punct:]] cualquier marca de puntuacin [[:space:]] cualquier espacio en blanco [[:upper:]] cualquier letra mayscula Los siguientes patrones son exclusivos de compatibles con Perl y no existen en POSIX extendido:

Patrn Significado [[:ascii:]] caracteres con cdigo ASCII de 0 a 127 [[:blank:]] espacios o tabuladores [[:cntrl:]] caracteres de control [[:graph:]] caracteres de impresin, salvo el espacio [[:print:]] caracteres de impresin, espacio incluido [[:word:]] cualquier letra o dgito y el guin bajo [[:xdigit:]] cualquier dgito hexadecimal \w \W \s \S \d \D \b \A \Z \z cualquier letra o dgito y el guin bajo cualquier cosa que no sea letra o dgito y el guin bajo cualquier espacio en blanco cualquier cosa que no sea un espacio en blanco cualquier dgito cualquier cosa que no sea un dgito inicio o final de palabra comienzo final (incluido salto de lnea) final

Ejemplos de expresiones regulares


Patrn abc a2b b a\$b Cadena Cumple? awbwc No 34abc cbabcba g1da2b3 3b4 1a$b2 bic bcd [^aeiou] bic aei S S S S S S No S No ... o no admitidos Comentario Los caracteres tienen que estar seguidos. No importa que hayan caracteres antes... ... o despus. Las expresiones regulares detectan letras, nmeros, ... ... incluso acentos, ... ... salvo los caracteres ^ . [ $ ( ) | * + ? { \ que deben llevar una contrabarra \ antes, adems de \n (nueva lnea) y \t (tabulador) Los corchetes definen los caracteres admitidos en una posicin ...

[aeiou]

[p-t] [B-D] [0-9] [[:alpha:]] [[:digit:]] [[:alnum:]] [[:punct:]] [[:space:]] [[:upper:]] [[:lower:]] ^ab ab$ ^ab$

avr av1 PMD AV1 b9d bcd

S No S No S No

Se pueden definir rangos de caracteres... ... en minsculas o maysculas ... ... o nmeros Cualquier carcter alfabtico Cualquier nmero Cualquier nmero o carcter alfabticos Cualquier carcter que no sean letras y nmeros (menos el euro) Cualquier tipo de espacio en blanco Cualquier mayscula Cualquier minscula

cab abc abc cab ab abab abcde acde adcde abc ac ac abdc abcde

No S No S S No S S No S S No No S S No S S S S

Los caracteres tienen que estar al principio No importa que hayan caracteres despus Los caracteres tienen que estar al final No importa que hayan caracteres antes Tiene que empezar y acabar por ab ... ... y no puede haber nada antes o despus El carcter b puede estar entre a y c... ... o no estar entre a y c ... ... pero no puede haber otro carcter El . representa cualquier carcter ... ... incluso el espacio el blanco, ... pero no la ausencia del carcter o varios caracteres. El carcter b puede estar una vez... ... o varias ... ... pero tiene que estar al menos una vez. El carcter b puede estar una vez... ... o varias ... ... o ninguna. Las llaves indican el nmero exacto de repeticiones del carcter, ...

ab?c

a.c

ab+c

abbbcde acde abcde

ab*c

abbbcde acde

ab{3}c

abbbc

abbbbc abbc abc abbc ab{2,4}c abbbc abbbbc abbbbbc ab{2,}c a(bc){2}d abc abcbcd abcd a(bc)?d ad abd abc ^a(b|d)c$ adc abdc ac abc ^(ab)|(dc)$ adc abdc ac abc ^(ab)$|^(dc)$ adc dc

No No No S S S No No S S S No S S No No S S S No No No S

... no puede haber ms ... ... ni menos. Se pueden definir rangos con lmite inferior e inferior

Se pueden definir rangos sin lmite superior Los parntesis definen agrupaciones de caracteres. En este caso bc tiene que aparecer repetido Aqu bc puede estar ... ... o no estar, ... ... pero no puede aparecer slo la b, o slo la c u otro carcter Entre la a al principio y la c al final puede estar el carcter b... ... o el carcter d, ... ... pero no los dos, ... ... ni ninguno de ellos. Est la pareja ab al principio ... ... o dc ... ... o las dos, ... ... pero no ninguna Est la pareja ab, pero sobra la c ... ... o est la pareja dc, pero sobra la a. Est una de las dos

Expresiones regulares POSIX extendido


Nota: Dado que las funciones ereg (POSIX extendido) se consideran obsoletas a partir de PHP 5.3.0 (publicado en junio de 2009), se recomienda utilizar nicamente las funciones preg (PCRE).

Funciones de expresiones regulares POSIX extendido


Las funciones bsicas de expresiones regulares POSIX extendido para comparar una cadena con un patrn son ereg($patron, $cadena) y eregi($patron, $cadena). La diferencia

entre ellas es que ereg() distingue entre maysculas y minsculas y eregi() no. Estas funciones comprueban si la cadena cumple el patrn y devuelven el valor 1 (verdadero) o 0 (falso). Los argumentos de las funciones pueden ser cadenas o variables que contengan cadenas. Si el patrn es la cadena vaca, las funciones devuelven error.
<?php $cadena1 = "1234567"; $cadena2 = "abcdefg"; $patron = "^[[:digit:]]+$"; if (eregi($patron, $cadena1)) { print "<p>La cadena $cadena1 son slo nmeros.</p>\n"; } else { print "<p>La cadena $cadena1 no son slo nmeros.</p>\n"; } if (eregi($patron, $cadena2)) { print "<p>La cadena $cadena2 son slo nmeros.</p>\n"; } else { print "<p>La cadena $cadena2 no son slo nmeros.</p>\n"; } ?>

La cadena 1234567 son slo nmeros. La cadena abcdefg no son slo nmeros.

Faltan las funciones de bsqueda y sustitucin Volver al principio de la pgina

Sintaxis de las expresiones regulares POSIX extendido


Los patrones de las expresiones reguladores POSIX extendido son un subconjunto que las expresiones regulres compatibles con Perl, que se comentan en el apartado de expresiones regulres compatibles con Perl.
FUENTE: http://www.mclibre.org/consultar/php/lecciones/php_expresiones_regulares.html

Vous aimerez peut-être aussi