Manual de PHP: Expresiones regulares

Expresiones regulares

Las expresiones regulares son una forma de describir patrones para la búsqueda de cadenas (dentro de otras o dentro de un archivo ASCII) y se crean combinando caracteres normales con caracteres especiales (wildcards).

Es una forma de trabajar con cadenas muy utilizada en prácticamente todos los lenguajes de programación (como Perl, PHP o JavaScript), en muchos comandos del shell (como grep, sed y awk) así como en archivos de configuración (como Apache o Lighttpd), y en general, son bastante complicadas por lo poco descriptivas que son en sí mismas.

En una expresióon regular podemos encontrar dos tipos de caracteres:

  1. caracteres normales: su significado es el habitual (literal). Por ejemplo:
    "b" significa "la letra b"
  2. caracteres especiales: tienen un significado especial. Por ejemplo:
    "$" significa "final de linea"

    Los caracteres especiales son los siguientes:

    [ ] { } ( ) * $ ? | + – . ˆ

Podemos decirle al sistema que trate un carácter especial como si fuera un carácter normal y a la inversa. Para ello lo que haremos será preceder el carácter en cuestión con el carácter "" y diremos que lo hemos "escapado". Veamos los dos casos:

  1. caracteres normales escapados: algunos caracteres normales adquieren un significado especial al ser escapados con el carácter "". Por ejemplo:
    "b" significa "principio o final de una palabra".
  2. caracteres especiales escapados: para incluir en el patrón de búsqueda algún carácter especial debemos decirle al sistema que lo trate como un literal escapándolo con "". Por ejemplo:
    para buscar "" hay que escaparlo, quedando "\"
Expresiones regulares
Patrón Significado exp_reg match
Cadenas
. cualquier carácter excepto EOL ("nueva línea") "." cualquier carácter excepto EOL
carácter especial "*"
"\"
"*"
""
x un carácter "a"
"A"
"2"
"a"
"A"
"2"
xyz varios caracteres "hola" "hola"
x|y un carácter u otro "a|b" "a" o "b"
[xyz] un carácter que esté en una lista "[aeiou]" una vocal
[a-z] un carácter que pertenezca a un rango "[a-z]"
"[a-zA-Z]"
"[a-z][A-Z]"
una minúscula
una letra
una minúscula seguida de una mayúscula
[ˆx] cualquier carácter excepto "x" "[ˆa]" cualquier carácter excepto "a"
[ˆxyz] un carácter que no esté en una lista "[ˆaeiou]" una consonante
[ˆa-z] un carácter que no pertenezca a un rango "[ˆa-z]" una mayúscula
w cualquier carácter alfanumérico incluyendo el guión bajo equivale a [a-zA-Z0-9_]
W cualquier carácter no alfanumérico equivale a [ˆa-zA-Z0-9_]
d cualquier dígito equivale a [0-9]
D cualquier carácter no dígito equivale a [ˆ0-9]
t tabulador
r retorno de carro
n final de línea
s cualquier carácter no visible, como tabulador, retorno o espacio
S cualquier carácter visible
i case insensitive, con este modificador no distinguirá entre mayúsculas y minúsculas "/una/i" busca "una" sin distinguir entre mayúsculas y minúsculas
g global, este modificador se usa para que no se detenga un proceso de sustitución al encontrar la primera ocurrencia "/a/g" encontrará todas las "a" para sustituirlas
(xyz) recuerda el patrón para su posterior utilización con multiplicadores o referencias "(x).(ab)" para referencias posteriores "x"=$1 y "ab"=$2
Anclas: posición de la cadena
ˆ comienzo de línea "ˆa"
"ˆ[aeiou]"
"ˆhola"
"a" al comienzo de una línea
una vocal al comienzo de una línea
"hola" al comienzo de una línea
$ final de línea "a$"
"[aeiou]$"
"hola$"
"ˆ$"
"a" al final de una línea
una vocal al final de una línea
"hola" al final de una línea
una línea vacía
b principio o final de una palabra "bola" "ola" al principio o final de una palabra
Multiplicadores: cuántas veces ha de aparecer la cadena
* una cadena cero o más veces "hola*"
"hol(as)*"
"[a-z]*"
"hol", "hola", "holaa"
"hol", "holas", "holasas"
una palabra en minúsculas
+ una cadena una o más veces "hola+"
"hol(as)+"
"hola", "holaa", "holaaa"
"holas", "holasas"
? una cadena cero o una vez "hola?"
"hol(a)?"
"hol", "hola"
"hol", "holas"
{n} una cadena n veces "a{3}"
"(as){3}"
"aaa"
"asasas"
{n,m} una cadena entre n y m veces "a{2,4}"
"(as){2,4}"
"aa", "aaa", "aaaa"
"asas", "asasas", "asasasas"
{n,} una cadena al menos n veces "a{2,}"
"(as){2,}"
"aa", "aaa", "aaaa"
"asas", "asasas", "asasasas"

Editor de expresiones regulares en el entorno gráfico

En el entorno gráfico de Linux disponemos de varios editores de expresiones regulares:

  • Kiki (pythonide.stani.be, paquete kiki): herramienta escrita en Python que permite comprobar expresiones regulares contra un texto de ejemplo (es el editor de expresiones regulares del IDE para Python SPE, Stani’s Python Editor).

    Kiki

  • Kodos (kodos.sourceforge.net, paquete kodos): herramienta en Python que permite crear y probar expresiones regulares contra un texto de ejemplo.

    Kodos

  • Redet (billposer.org/Software/redet.html, paquete redet): herramienta para crear y probar expresiones regulares contra un texto de ejemplo con soporte para numerosos lenguajes de programación.

    Redet

  • Visual REGEXP (laurent.riesterer.free.fr/regexp/, paquete visual-regexp): herramienta en TCL que permite crear y probar expresiones regulares contra un texto de ejemplo.

    Visual REGEXP

  • Kregexpeditor (KDE Regular expressions editor, paquete kregexpeditor): editor gráfico de expresiones regulares de KDE.

    Kregexpeditor

13 Artículos en la categoría "Manual de PHP"

  1. Manual de PHP: Estructuras de control
  2. Manual de PHP: Funciones
  3. Manual de PHP: Objetos
  4. Manual de PHP: Formularios web
  5. Manual de PHP: Imágenes
  6. Manual de PHP: XML
  7. Manual de PHP: MySQL
  8. Manual de PHP: Sesiones
  9. Manual de PHP: Matrices
  10. Manual de PHP: Expresiones regulares
  11. Manual de PHP: Sanear datos de usuario
  12. Manual de PHP: Email
  13. Manual de PHP: Evitar el hotlinking de los buscadores

Un pensamiento en “Manual de PHP: Expresiones regulares

  1. Victor

    Men, muy bien explicado. Pero sabes que ando con una bendita duda. Al correr este segmento de codigo. Se supone que debe ser devuelto el mensaje de error si no se presiona de a-z o de A-Z, pero paradojicamente, no funciona como se supone. Esto es en lenguaje Python. Te agradezco consejo si eres tan amable, esto era para ayer pero buehhh no importa cuando respondas. Te agradezco si me solventas la duda

    if Nombre==”" or re.match(“[^a-zA-Z]“,u’Nombre’):

    dialogo = wx.MessageDialog(self.ventana, u’El campo Nombre esta vacio o se introdujo un caracter no valido’, u’Informacion’, wx.OK | wx.ICON_INFORMATION)
    dialogo.ShowModal()
    dialogo.Destroy()
    self.cuadro_Nombre.SetFocus()

    Responder

Responder a Victor Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>