Expresiones regulares en PHP regex

expresiones regulares regex php

Las expresiones regulares, también conocidas como regex, son una herramienta poderosa en programación que te permiten manipular texto y cadenas de caracteres de manera eficiente. Se utiliza para buscar, reemplazar y manipular texto de manera efectiva y rápida.

Índice
  1. ¿Por qué utilizar Expresiones Regulares?
  2. Ventajas e inconvenientes de utilizar expresiones regulares
  3. Ejemplos de uso de expresiones regulares
  4. Recomendación para PHP
  5. Finalmente algunos ejemplos de uso práctico

¿Por qué utilizar Expresiones Regulares?

Regex es una secuencia de caracteres que forma un patrón de búsqueda y se utiliza para identificar si una cadena de texto cumple con ciertas reglas. Una de las razones más comunes para utilizar regex en PHP es para validar formularios en línea, como direcciones de correo electrónico, números de teléfono y contraseñas. Esto permite asegurar que los datos ingresados ​​por los usuarios cumplan con ciertos criterios antes de ser enviados al servidor.

Ventajas e inconvenientes de utilizar expresiones regulares

Las principales ventajas de utilizar expresiones regulares en PHP son su eficiencia, flexibilidad y capacidad para buscar y manipular texto de manera precisa y rápida. Además, regex se puede utilizar en una variedad de situaciones, como la búsqueda y reemplazo de texto en archivos, la validación de entradas de usuario en formularios, la manipulación de cadenas de texto en bases de datos y la extracción de datos de archivos de registro.

Una de las desventajas de utilizar regex es su complejidad y dificultad para entender escribir patrones de búsqueda complejos. Además, la utilización inadecuada de expresiones regulares puede afectar el rendimiento y la seguridad del sitio web o la aplicación en cuestión.

Pero una vez se comprende y con práctica se consiguen geniales resultados.

Ejemplos de uso de expresiones regulares

Algunos ejemplos comunes de uso de expresiones regulares incluyen:

  • \d: Buscar dígitos en una cadena de texto.
  • ^: Buscar patrones que comienzan con un cierto carácter o conjunto de caracteres.
  • $: Buscar patrones que terminan con un cierto carácter o conjunto de caracteres.
  • [a-z]: Buscar patrones que contengan cualquier letra minúscula del alfabeto.
  • \s: Buscar espacios en blanco en una cadena de texto.
  • \w: Buscar caracteres alfanuméricos en una cadena de texto.
  • \b: Buscar palabras completas en una cadena de texto.
  • (...): Capturar grupos de caracteres en una cadena de texto.
  • |: Buscar patrones que contengan cualquiera de las opciones dadas.
  • +: Buscar patrones que contengan uno o más caracteres de un conjunto dado.
  • *: Buscar patrones que contengan cero o más caracteres de un conjunto dado.
  • ?: Buscar patrones que contengan cero o un carácter de un conjunto dado.
  • {n,m}: Buscar patrones que contengan entre n y m caracteres de un conjunto dado.
  • {n,}: Buscar patrones que contengan al menos n caracteres de un conjunto dado.
  • (?=...): Buscar patrones que se encuentren antes de una determinada expresión.
  • (?<=...): Buscar patrones que se encuentren después de una determinada expresión.
  • (?!...): Buscar patrones que no se encuentren antes de una determinada expresión.
  • (?: Buscar patrones que no se encuentren después de una determinada expresión.

Recomendación para PHP

En conclusión, las expresiones regulares son una herramienta invaluable para cualquier desarrollador de PHP que trabaje con cadenas de texto. Con un conocimiento adecuado de la sintaxis de expresiones regulares y una práctica adecuada, las expresiones regulares pueden ser utilizadas para procesar datos de texto de manera eficiente y precisa.

Una recomendación particular de uso de expresiones regulares en PHP es asegurarse de utilizar la función preg_match() para la validación de entrada de usuario en formularios web en lugar de simplemente validar mediante la función filter_input(). Aunque ambas funciones pueden ser utilizadas para la validación de entradas de usuario, preg_match() ofrece una mayor flexibilidad en la validación de patrones de texto complejos y es menos susceptible a errores de entrada de usuario.

A continuación, se presentan algunos ejemplos comunes de metacaracteres utilizados en expresiones regulares de PHP:

  1. ^ Se utiliza para indicar el inicio de una cadena de texto.
  2. $ Se utiliza para indicar el final de una cadena de texto.
  3. . Representa cualquier carácter único.
  4. \d Representa cualquier dígito numérico.
  5. \s Representa cualquier espacio en blanco.
  6. \w Representa cualquier letra, número o guion bajo.
  7. [ ] Se utiliza para crear un conjunto de caracteres.
  8. [^ ] Se utiliza para crear un conjunto negativo de caracteres.
  9. *. Indica que el elemento anterior puede aparecer cero o más veces.
  10. +. Indica que el elemento anterior debe aparecer una o más veces.
  11. ? Indica que el elemento anterior puede aparecer cero o una vez.
  12. {n} Indica que el elemento anterior debe aparecer exactamente n veces.
  13. {n,} Indica que el elemento anterior debe aparecer al menos n veces.
  14. {n,m} Indica que el elemento anterior debe aparecer entre n y m veces.
  15. | Se utiliza para alternar entre varias opciones.
  16. ( ) Se utiliza para agrupar elementos en una expresión regular.
  17. \b Representa un límite de palabra.
  18. \A Representa el inicio del texto.
  19. \z Representa el final del texto.
  20. \W : Representa cualquier carácter que no sea una letra, número o guion bajo.

Estos son solo algunos ejemplos de los muchos metacaracteres disponibles en las expresiones regulares de PHP. Cada uno tiene una función específica y puede ser combinado de diversas formas para crear patrones de búsqueda y reemplazo más complejos y específicos.

En conclusión, las expresiones regulares son una herramienta poderosa y esencial para cualquier desarrollador de PHP que trabaje con cadenas de texto. Aunque pueden parecer intimidantes al principio, una vez que se comprende la sintaxis y se practica lo suficiente, las expresiones regulares se convierten en una herramienta indispensable para el procesamiento de texto en PHP. Se recomienda utilizarlas de manera adecuada y mantener una buena documentación y práctica para aprovechar al máximo su potencial.

Finalmente algunos ejemplos de uso práctico

Función preg_atch($expresion, $cadena)), evalúa la cadena de caracteres y según la expresión indica si es verdadero o falso, si cumple la condición o no. Además pasando el tercer parámetro $matches, captura el array de opciones en cada patrón utilizado.

preg_match($expresion, $cadena, $matches)

Utilización de MetaCaracteres y su salida por consola

Entre barras: / /
Cadena: Psj. Avizcion 123
Expresion: /Av/
Cumple condicion: SI

array (size=1)
  0 => string 'Av' (length=2)

Coincide al inicio: ^ /
Cadena: Psj. Avizcion 123
Expresion: /^Av/
Cumple condicion: NO

Coincide al final: $ /
Cadena: Psj. Avizcion 123
Expresion: /123$/
Cumple condicion: SI

array (size=1)
  0 => string '123' (length=3)

Coincide al final: $ /
Cadena: Psj. Avizcion 123 023
Expresion: /123$/
Cumple condicion: NO


Sensible mayusculas y minusculas: /i
Cadena: Av. Avizcion 123
Expresion: /^av/i
Cumple condicion: SI

array (size=1)
  0 => string 'Av' (length=2)

Palabra Hol terimada en vocal: [a-u]]
Cadena: Hola
Expresion: /hol[a-u]/i
Cumple condicion: SI

array (size=1)
  0 => string 'Hola' (length=4)

Palabra Hol terimada en numero: [0-9]]
Cadena: Hol6
Expresion: /hol[0-9]/i
Cumple condicion: SI

array (size=1)
  0 => string 'Hol6' (length=4)

Palabra Hol SI terimada en letra o numero: [a-u][0-9]
Cadena: Holz
Expresion: /hol[a-u][0-9]/i
Cumple condicion: NO

NEGACIÓN (^ al principio) Palabra Hol NO terimada en letra o numero: [^a-u][^0-9]
Cadena: Hol7
Expresion: /hol[^a-u]/i
Cumple condicion: SI

array (size=1)
  0 => string 'Hol7' (length=4)

Escape de caracteres con barra: \]
Cadena: Hola]
Expresion: /hol[a-u\]]/i
Cumple condicion: SI

array (size=1)
  0 => string 'Hola' (length=4)

Cualquier alfanumérico: \w
Cadena: Holaasadfaf
Expresion: /hol\w/i
Cumple condicion: SI

array (size=1)
  0 => string 'Hola' (length=4)

Cualquier alfanumérico (minus): \w
Cadena: Hol%
Expresion: /hol\w/i
Cumple condicion: NO

Cualquier NO alfanumérico (mayus): \W
Cadena: Hol%
Expresion: /hol\W/i
Cumple condicion: SI

array (size=1)
  0 => string 'Hol%' (length=4)

Cualquier SI sea Numero (minus): \d
Cadena: Hol7
Expresion: /hol\d/i
Cumple condicion: SI

array (size=1)
  0 => string 'Hol7' (length=4)

Cualquier NO sea Numero (mayus): \D
Cadena: Hol7
Expresion: /hol\D/i
Cumple condicion: NO


Puede o no puede existir la palabra: *
Cadena: Hol
Expresion: /hola*/i
Cumple condicion: SI

array (size=1)
  0 => string 'Hol' (length=3)

Cadena: Holaaaaaaaaaa
Expresion: /hol*/i
Cumple condicion: SI

array (size=1)
  0 => string 'Hol' (length=3)

Almenos existe una vez: +
Cadena: Hol
Expresion: /hola+/i
Cumple condicion: NO

Cadena: Holaaaaaaaaaaa
Expresion: /hola+/i
Cumple condicion: SI

array (size=1)
  0 => string 'Holaaaaaaaaaaa' (length=14)

Existe un caracter concreto Opcional: ?
Cadena: Holaaaaaaaaaaa
Expresion: /ho?la/i
Cumple condicion: SI

array (size=1)
  0 => string 'Hola' (length=4)

Cadena: Hlaaaaaaaaaaa
Expresion: /ho?la/i
Cumple condicion: SI

array (size=1)
  0 => string 'Hla' (length=3)

Cadena: Hoooooooolaaaaaaaaaaa
Expresion: /ho?la/i
Cumple condicion: NO

Cantidad de veces que se puede repetir un caracter: {3}
Cadena: Hoooooooolaaaaaaaaaaa
Expresion: /ho{3}la/i
Cumple condicion: NO

Cadena: Hooolaaaaaaaaaaa
Expresion: /ho{3}la/i
Cumple condicion: SI

array (size=1)
  0 => string 'Hooola' (length=6)

Cantidad entre veces que se puede repetir un caracter: {2,5}
Cadena: Hoolaaaaaaaaaaa
Expresion: /ho{2,5}la/i
Cumple condicion: SI

array (size=1)
  0 => string 'Hoola' (length=5)

SubPatrones con Paréntesis: ()
Cadena: Llegaré pronto que voy volando
Expresion: /Llegaré pronto que voy (vol|and)ando/i
Cumple condicion: SI

array (size=2)
  0 => string 'Llegaré pronto que voy volando' (length=31)
  1 => string 'vol' (length=3)

Cadena: Llegaré pronto que voy andando
Expresion: /Llegaré pronto que voy (vol|and)ando/i
Cumple condicion: SI

array (size=2)
  0 => string 'Llegaré pronto que voy andando' (length=31)
  1 => string 'and' (length=3)

Cadena: Llegaré pronto que voy corriendo
Expresion: /Llegaré pronto que voy (vol|and)ando/i
Cumple condicion: NO

Funcion preg_atch($excpresion, $cadena, $matches))

Captura de parámetros


SubPatrones con Paréntesis: ()
Cadena: Llegaré pronto que voy volando
Expresion: /Llegaré pronto que voy (vol|and)ando/i
Cumple condicion: SI

array (size=2)
  0 => string 'Llegaré pronto que voy volando' (length=31)
  1 => string 'vol' (length=3)

URL Válida comienza por https://
Cadena: https://youtu.be/xGaXH7spCyA
Expresion: %^https://%
Cumple condicion: SI

array (size=1)
  0 => string 'https://' (length=8)

URL Válida comienza por https:// OPCIONAL: ^( )?
Cadena: youtu.be/xGaXH7spCyA
Expresion: %^(https://)?%
Cumple condicion: SI

array (size=1)
  0 => string '' (length=0)

URL Válida además por www. OPCIONAL escapando el punto: ^( \. )?
Cadena: www.youtu.be/xGaXH7spCyA
Expresion: %^(https://)?(www\.)?%
Cumple condicion: SI

array (size=3)
  0 => string 'www.' (length=4)
  1 => string '' (length=0)
  2 => string 'www.' (length=4)

URL Válida además con dominios OPCIONAL escapando el punto: ^( \. )?
Cadena: www.youtube.com/xGaXH7spCyA
Expresion: %^(https://)?(www\.)?(youtu\.be|youtube\.com)%
Cumple condicion: SI

array (size=4)
  0 => string 'www.youtube.com' (length=15)
  1 => string '' (length=0)
  2 => string 'www.' (length=4)
  3 => string 'youtube.com' (length=11)

URL Válida además con caracteres alfanumericos entre 10 12 caracteres: \w(10,12)
Cadena: youtu.be/xGaXH7spCyA
Expresion: %^(https://)?(www\.)?(youtu\.be|youtube\.com)/(\w{10,12})%
Cumple condicion: SI

array (size=5)
  0 => string 'youtu.be/xGaXH7spCyA' (length=20)
  1 => string '' (length=0)
  2 => string '' (length=0)
  3 => string 'youtu.be' (length=8)
  4 => string 'xGaXH7spCyA' (length=11)

Omitir parametros con intrerrgación . al inicio del subpatrón: (?:)
Cadena: youtu.be/xGaXH7spCyA
Expresion: %^(?:https://)?(?:www\.)?(?:youtu\.be|youtube\.com)/(\w{10,12})%
Cumple condicion: SI

array (size=2)
  0 => string 'youtu.be/xGaXH7spCyA' (length=20)
  1 => string 'xGaXH7spCyA' (length=11)

Además insensible a mayusculas y minúsculas: i
Cadena: YouTu.be/xGaXH7spCyA
Expresion: %^(?:https://)?(?:www\.)?(?:youtu\.be|youtube\.com)/(\w{10,12})%i
Cumple condicion: SI

array (size=2)
  0 => string 'YouTu.be/xGaXH7spCyA' (length=20)
  1 => string 'xGaXH7spCyA' (length=11)

Encontrar líneas duplicadas en un documento

De una lista de líneas ordenadas alfabéticamente, elimina cuando se encuentra una línea inferior igual.

Cadena:
uno
dos
dos
tres
tres

Expresión: ^(.*)(\r?\n\1)+$

Cumple condición: SI

Resultado:
uno
dos
tres

Según vaya necesitando más patrones y combinaciones se irán agregando en esta sección.

Deja una respuesta

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

Subir