Volver al índice Expresiones regulares


Comparar expresiones

Las principales funciones para comparar una cadena con un patrón son ereg($patron, $cadena) y eregi($patron, $cadena). La diferencia entre ellas es que ereg() distingue entre mayúsculas y minúsculas y eregi() no. Estas funciones comprueban si la cadena cumple el patrón y devuelven el valor 1 (verdadero) o 0 (falso). Los argumentos de las funciones pueden ser cadenas o variables que contengan cadenas. Si el patrón es la cadena vacía, las funciones devuelven error.

<?php
  $cadena1 = "1234567";
  $cadena2 = "abcdefg";
  $patron = "^[[:digit:]]+$";

  if (eregi($patron, $cadena1)
    print "<p>La cadena $cadena1 son sólo números.</p>";
  else
    print "<p>La cadena $cadena1 no son sólo números.</p>";

  if (eregi($patron, $cadena2)
    print "<p>La cadena $cadena2 son sólo números.</p>";
  else
    print "<p>La cadena $cadena2 no son sólo números.</p>";
?>
La cadena 1234567 son sólo números.
La cadena abcdefg no son sólo números.

Volver al principio


Sintaxis de las expresiones regulares de PHP

Patrón Significado
. cualquier carácter
^c empezar por el carácter c
c$ terminar por el carácter c
c+ 1 o más caracteres c
c* 0 o más caracteres c
c? 0 o 1 caracteres c
\n nueva línea
\t tabulador
\ escape, para escribir delante de caracteres especiales: ^ . [ ] % ( ) | * ? { } \
(cd) caracteres c y d agrupados
c|d caracter c o d
c{n} n veces el carácter c
c{n,} n o más carácteres c
c{n,m} desde n hasta m caracteres c
[a-z] cualquier letra minúscula
[A-Z] cualquier letra mayúscula
[0-9] cualquier dígito
[cde] cualquiera de los carácteres c, d o e
[c-f] cualquier letra entre c y f (es decir, c, d, e o f)
[^c] que no esté el caracter c
[[:alpha:]] cualquier letra
[[:digit:]] cualquier dígito
[[:alnum:]] cualquier letra o dígito
[[:space:]] cualquier espacio en blanco
[[:punct:]] cualquier marca de puntuación
[[:upper:]] cualquier letra mayúscula
[[:lower:]] cualquier letra minúscula

Volver al principio


Ejemplos de expresiones regulares

Patrón Cadena ¿Cumple? Comentario
abc awbwc No Los caracteres tienen que estar seguidos.
34abc Sí No importa que hayan caracteres antes...
cbabcba Sí ... o después.
a2b g1da2b3 Sí Las expresiones regulares detectan letras, números, ...
áb 3áb4 Sí ... incluso acentos, ...
a\$b 1a$b2 Sí ... salvo los caracteres ^ . [ $ ( ) | * + ? { \ €
que deben llevar una contrabarra \ antes,
además de \n (nueva línea) y \t (tabulador)
[aeiou] bic Sí Los corchetes definen los caracteres admitidos en una posición ...
bcd No
[^aeiou] bic Sí ... o no admitidos
aei No
[p-t] avr Sí Se pueden definir rangos de caracteres...
av1 No
[B-D] PMD Sí ... en minúsculas o mayúsculas ...
AV1 No
[0-9] b9d Sí ... o números
bcd No
[[:alpha:]] Cualquier carácter alfabético (sin acentos)
[[:digit:]] Cualquier número
[[:alnum:]] Cualquier número o carácter alfabéticos (sin acentos)
[[:punct:]] Cualquier carácter que no sean letras y números (menos el euro)
[[:space:]] Cualquier tipo de espacio en blanco
[[:upper:]] Cualquier mayúscula (sin acentos)
[[:lower:]] Cualquier minúscula (sin acentos)
^ab cab No Los caracteres tienen que estar al principio
abc Sí No importa que hayan caracteres después
ab$ abc No Los caracteres tienen que estar al final
cab Sí No importa que hayan caracteres antes
^ab$ ab Sí Tiene que empezar y acabar por aba ...
abab No ... y no puede haber nada antes o después
ab?c abcde Sí El carácter b puede estar entre a y c...
acde Sí ... o no estar entre a y c ...
adcde No ... pero no puede haber otro carácter
a.c abc Sí El . representa cualquier carácter ...
a c Sí ... incluso el espacio el blanco, ...
abdc No pero sólo un carácter
ab+c abcde Sí El carácter b puede estar una vez...
abbbcde Sí ... o varias ...
acde No ... pero tiene que estar al menos una vez.
ab*c abcde Sí El carácter b puede estar una vez...
abbbcde Sí ... o varias ...
acde Sí ... o ninguna.
ab{3}c abbbc Sí Las llaves indican el número exacto de repeticiones del carácter, ...
abbbbc No ... no puede haber más ...
abbc No ... ni menos.
ab{2,4}c abc No Se pueden definir rangos con límite inferior e inferior
abbc Sí
abbbc Sí
abbbbc Sí
abbbbbc No
ab{2,}c abc No Se pueden definir rangos sin límite superior
a(bc){2}d abcbcd Sí Los paréntesis definen agrupaciones de carácteres.
En este caso bc tiene que aparecer repetido
a(bc)?d abcd Sí Aquí bc puede estar ...
ad Sí ... o no estar, ...
abd No ... pero no puede aparecer sólo la b, o sólo la c u otro carácter
a(b|d)c abc Sí Entre la a y la c puede estar el carácter b...
adc Sí ... o el carácter d, ...
abdc No ... pero no los dos, ...
ac No ... ni ninguno de ellos.
^(ab)|(dc)$ abc Sí Está la pareja ab ...
adc Sí ... o dc ...
abdc Sí ... o las dos, ...
ac No ... pero no ninguna
^(ab)$|^(dc)$ abc No Está la pareja ab, pero sobra la c ...
adc No ... o está la pareja dc, pero sobra la a.
dc Sí Está una de las dos

Volver al principio

Autor: Bartolomé Sintes Marco
Última modificación: 7 de febrero de 2006