Como usar Expresiones Regulares en PHP



Las expresiones regulares son una herramienta muy poderosa para trabajar con textos y también está reservada para solo una pequeña parte de programadores, esto debido a que muy pocos se toman el tiempo para estudiarlas y aprenderlas, si eres de los que aún no las dominan, puedes leer estos artículos para introducirte al tema: ¿Qué son las expresiones regulares?Cómo trabajar con expresiones regulares.

Encontrar el dominio en una URL

Ahora que ya sabes que son las expresiones regulares, voy a enseñarte cómo utilizarlas en PHP, primero crea un archivo como este regex.php

<?php
//Obtener el dominio de una direccion (url)
$patron = '@^(http[s]*://)*([^/]+)@'; //Patron de Expresion regular
$texto = 'https://www.codigonaranja.com/regex.php'; //Texto para la busqueda
preg_match($patron, $texto, $matches); //Ejecutar la busqueda mediante regex
echo "Dominio: " . $matches[2]; //Resultado
?>

Ahora veamos este código por partes, primero tenemos una variable con una expresión regular que está entre comillas simples, lo primero que tenemos que notar es que (además de las comillas) la expresión regular está encerrada entre signos @, esto es un requisito, pero no necesariamente deben de ser @, puede ser casi cualquier carácter que desees por ejemplo #, /, $, etc, el truco en elegir el carácter es que no lo uses en tu expresión regular, de otro modo PHP va a darte un error.

Luego tenemos un texto, aquí hay una URL y nuestro objetivo es conocer cuál es el dominio, que en este caso será www.codigonaranja.com. Después está la función preg_match que es la que usamos para hacer búsquedas mediante expresiones regulares en PHP, aquí la usamos con 3 parámetros, el primero es la regex, el segundo es el texto al cual vamos a aplicar la expresión regular y el tercero es una variable en la cual la función va a regresarnos el resultado de la función.

Ahora solo tienes que crear el archivo y hacer algunas pruebas, no omitas este paso, porque te ayudará a comprender mejor todo. Si te funciono todo bien, entonces has dos pruebas más:

  1. Cambia el delimitador @ por otro que se te ocurra y mira si todo sigue funcionando.
  2. Prueba con diferentes URL en la variable $texto, incluye dominios con http y https o incluso sin esa parte, por ejemplo www.codigonaranja.com/algomas.php

Veamos ahora más detalles sobre este ejemplo, algo que no había mencionado es el uso de paréntesis, estos se usan para crear grupos, como vemos en la siguiente imagen, la RegEx va a buscar dos grupos, uno que equivale a http:// y que opcionalmente puede llevar una “s” y otro grupo con todo lo demás que no sea un carácter /

Grupos en expresiones regulares

Expresión regular en php por grupos

Al ejecutar la función preg_match nos retornó las coincidencias encontradas en la variable $matches en forma de array y en el índice 0 va a retornar el texto que coincidió con el patrón completo, en el índice 1 va a regresar el texto que coincide con el primer grupo, en el índice 2 va a regresar el texto que coincide con el grupo 2 y así en adelante. Entonces por eso que la variable $matches[2] contiene el dominio.

Validar si una clave es segura.

Ahora veamos otro ejemplo, suponiendo que debemos validar si una contraseña es segura, nos dicen que como mínimo debe contener un carácter especial (!@#$&), un número, una letra mayúscula, una minúscula y al menos 8 caracteres. Para esto podemos usar este código:

<?php
/*
  Valida que la clave contenga !@#$&, mayusculas, minusculas y numeros, y almenos 8 caracteres
  Regresa True si es segura y False si es no segura
 */
function esClaveSegura($clave){
  $patron = "|^(?=.*[A-Z])(?=.*[!@#$&])(?=.*[0-9])(?=.*[a-z]).{8,}$|";
  preg_match($patron, $clave, $matches);
  return count( $matches );
}
//Probar la función....
echo '<br>'. (esClaveSegura("12345678") ? 'Segura':'No es segura');
echo '<br>'. (esClaveSegura("Lu1sCruz123") ? 'Segura':'No es segura');
echo '<br>'. (esClaveSegura("AAAAbbb123#") ? 'Segura':'No es segura');
?>

Ahora voy a explicarte como funciona esta expresión regular, otra vez, aquí hay algo nuevo y es la combinación de caracteres ?= estos se usan en grupos, como los que creamos usando paréntesis, y se usan para condicionar si la una cadena de texto es válida.

Por ejemplo, la expresión Luis(?=Cruz) dice que el nombre Luis es válido solo si se encuentra antes del texto Cruz, otro efecto que hace es que la palabra Cruz no es parte de las coincidencias, es decir no va a retornar este grupo en la variable $matches.

La función para validar la clave, regresa la cantidad de coincidencias, la cual, en este caso, siempre va a ser 0 o 1, lo cual se interpreta como False o True respectivamente.

¡Ahora a practicar!

Ya viste estos ejemplos, ahora intenta lograr estos mismos resultados: Encontrar el dominio de una URL y validar si la clave es segura, pero sin utilizar Expresiones Regulares, de esta forma podrás comparar el beneficio de saber trabajar con Expresiones Regulares.

Deja una respuesta

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