Professional Documents
Culture Documents
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).
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
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
[aeiou]
[p-t] [B-D] [0-9] [[:alpha:]] [[:digit:]] [[:alnum:]] [[:punct:]] [[:space:]] [[:upper:]] [[:lower:]] ^ab ab$ ^ab$
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
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
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.