PHP Altruisas Ocio Eventos Cursos Las Palmas
//

Las expresiones regulares en PHP

Mediante las expresiones regulares podemos encontrar una subcadena en una cadena dada o determinada. Debido a su gran potencialidad se pueden realizar búsquedas complejas que nos van a facilitar el desarrollo del código que validan que un texto patrón existe en otro texto matriz.

Por ejempo, si tenemos una entrada de tipo input de caracteres de texto y está destinado a un campo password, y este debe tener una extensión entre 5 y 10 caracteres, lo vamos a poder implementar gracias a la utilización de lo que se conoce como expresiones regulares.

Una expresión regular tiene un aspecto tal como #^(.{5,10})$# y va a posibilitar realizar fácilmente la comprobación de si este requisito impuesto se cumple dentro de una cadena de texto lineal o multilineal. Lógicamente su utilización será conjuntamente con funciones de PHP , por ejemplo preg_match( ), u otro lenguaje.

Ejemplo para PHP:

<?php
   $patron = '/^[a-z][a-z0-9_#*$]{3,}/i';
   // con la i tras el limitador se indica que no exista 
   //sensibilidad a mayúsculas y minúsculas
   //Array con las cadenas que se van a probar
   $cadenas[]= 'A0_#b*1$2'; //OK
   $cadenas[]= '0_#b*1$2'; //no comienza por una letra
   $cadenas[]= 'A0_'; //longitud insuficiente
   $cadenas[]= 'A0_€#'; //carácter € no válido
   foreach ($cadenas as $cadena){
      if (preg_match ($patron, $cadena) == 0 {
         echo "$cadena => no OK<br>";
      }else {
         echo "$cadena => OK<br>";
      }
   }
?>

Ejecutar el código

Estructura de una expresión regular

Una expresión regular no es más que una ristra de caracteres (alfabéticos, numéricos y especiales) que siguen unas reglas y que son entendibles por partes bien identificadas. Por ejemplo, debe estar limitada al principio y al final por un carácter destinado especial que la mayoría de las veces coincide con la barra ‘/’, pero pueden ser otros como por ejemplo ( ), { }, [ ], < > o incluso ‘#’ en el inicio y en el final.

Ejemplos:

/http:\/\/(.*)/ ; {http:\/\/(.*)} ;#http://(.*)#

Como se puede ver en el ejemplo, si se usan delimitadores con la / y esta está en el patrón de búsqueda, deben escaparse con la barra invertida.

Clase de caracteres

Vienen definidos entre corchetes en la expresión regular y hacen referencia a una lista de caracteres posibles para un carácter buscado. Hay dos formas de definirlos: designándolos uno a uno o estableciendo un rango tan solo indicando el principio y el final separándolos con un guión.

Ejemplos:

  • [abcd] -> acepta un carácter a, b, c o d
  • [a-d] -> acepta un carácter a,b,c o d
  • [123a-zA-Z] -> acepta un carácter igual a 1 o 2 o 3, o comprendido entre la a y z, o entre A y Z

Existen clases ya predefinidas y estas van entre corchetes pero además delimitados con dos puntos de esta forma, [:clase predefinida:]

Clases predefinidas

  • [:digit:] -> Cifras.
  • [:alnum:] -> Caracteres alfanumericos.
  • [:word:] -> Caracteres de palabra (caracteres alfanuméricos y el carácter barra subyacente ‘_’).
  • [:alpha:] -> Caracteres alfabéticos.
  • [:lower:] -> Caracteres alfabéticos en minúsculas.
  • [:upper:] -> Caracteres alfabéticos en mayúsculas.
  • [:print:] -> Caracteres gráficos o blancos.
  • [:blank:] ->  Caracteres «blancos» (espacio y tabulador).
  • [:space:] -> Espacio, tabulador, nueva línea, retorno de carro.
  • [:punct:] -> Caracteres de puntuación.

El punto


Cuando se usa el punto fuera de una clase de caracteres sustituye a cualquier carácter. Por ejemplo el patrón #a.b# acepta cualquier secuencia con una ‘a’ seguido de cualquier carácter seguido de una b: aib, azb son correcto, pero no lo son ab ni aibz.

Para el siguiente ejemplo, ya visto anteriormente, #http://(.*)# se acepta cualquier cadena que esté compuesta por «http://» + cualquier carácter con un valor de repetición determinado por el símbolo asterisco y cuyo significado es:  puede no existir el carácter, haber un solo carácter, o haber varios caracteres. Es decir, son válidos desde «http://» también «http://a»  e incluso «http://www.altruistas.org». Acceda a la plataforma de simulación y tenga presente que no es necesario introducir el carácter delimitador, proceda a dar entrada exclusivamente a la expresión: http://(.*) para comprenderlo mejor.

Acceso al simulador de expresiones regulares

Uso de la Barra invertida ‘\’


Tiene varios usos. Primero, permite escapar los caracteres especiales ‘ ^.[$( )|*+?{\ o el delimitador de la expresión cuando se buscan como tales.

Ejemplo, el patrón #a\*{2,4}b# permite buscar las subcadenas que comienzan por una ‘a’ seguida de 2 a 4 ‘*’ seguidos de una ‘b’.

Uso de la barra vertical ‘|’


Con la barra vertical se puede definir alternativas. Por ejemplo, el patrón /juan|antonio/ permite buscar o ‘juan’ o ‘antonio’. Se pueden establecer un número ilimitado de alternativas.

Uso de subpatrón (submáscara)


Siempre están delimitados por paréntesis y contienen expresiones regulares. Los subpatrones, además, se pueden anidar.

Por ejemplo, el patrón /cal(do|efacción|)/ acepta las palabras «cal», «caldo» y «calefacción». Observe que una alternativa está vacía.

Se produce una captura del texto correspondiente al subpatrón y se almacena en memoria asociándose a un número para poder referenciarse.

Repeticiones


A través de varios cuantificadores, se pueden utilizar para indicar que un carácter, un comodín, una clase de caracteres o un subpatrón pueden repetirse un número determinado de veces.

  • {X} indica que lo anterior debe estar presente exactamente x veces.
  • {x, } por lo menos x veces
  • {x,y} entre x e y veces

Algunos ejemplos son: ab{2}c acepta abbc; ab {2,4} c : acepta abbc, abbbc, abbbbc pero rechaza abc y también abbbbbc; ab{2, }c : acepta abbc, abbbc, abbbbc, abbbbbc pero rechaza abc.

  • * -> Se usa el asterisco para marcar que lo anterior puede estar presente cero, una o varias veces y equivale a {0, }
  • + -> Marca que lo anterior debe estar presente al menos una vez y equivale a {1, }
  • ? -> Lo anterior puede estar presente cero o una vez y equivale a {0,1}

La opciones en la búsqueda


Con estas opciones que van ubicadas detrás del delimitador de cierre es posible indicar algunas opciones para que modifiquen la forma de buscar.

Estas son las principales:

  • i => Se busca sin sensibilidad a mayúsculas yminúsculas.
  • s => El símbolo «punto» (.) incluye el salto de línea.
  • m => Búsqueda en varias líneas.
  • x => Permite ignorar los caracteres de espacio.
  • U => Hacemos que todos los cuantificadores de expresión regular sean no codiciosos.

Se tratarán las opciones en nuevo artículo para poder profundizar junto a algunos ejemplos.

Deja una respuesta