viernes, 5 de julio de 2013

[PHP]Expresiones regulares PCRE

Que es una expresión regular

Una expresión regular, a menudo llamada también patrón, es una expresión que describe un conjunto de cadenas sin enumerar sus elementos. Por ejemplo, el grupo formado por las cadenas Handel, Händel y Haendel se describe mediante el patrón "H(a|ä|ae)ndel". La mayoría de las formalizaciones proporcionan los siguientes constructores: una expresión regular es una forma de representar a los lenguajes regulares (finitos o infinitos) y se construye utilizando caracteres del alfabeto sobre el cual se define el lenguaje.
En informática, las expresiones regulares proveen una manera muy flexible de buscar o reconocer cadenas de texto.


¿Por que PCRE?

Perl Compatible Regular Expressions (PCRE, Expresiones Regulares Compatibles con Perl en español) es una librería de C de expresiones regulares inspirada por Perl, fue escrita por Philip Hazel. La sintaxis de PCRE es mucho más poderosa y flexible que cualquier variante de expresiones regulares provistas por POSIX y otras muchas clásicas librerías de expresiones regulares. El nombre es un poco inexacto, debido al hecho de que PCRE y Perl tienen capacidades que no comparten entre ambos.

 Funciones que son utilizadas en PCRE

  • preg_filter — Realiza una búsqueda y sustitución de una expresión regular
  • preg_grep — Devuelve entradas de matriz que coinciden con el patrón
  • preg_last_error — Devuelve el código de error de la última ejecución de expresión regular PCRE
  • preg_match_all — Realiza una comparación global de una expresión regular
  • preg_match — Realiza una comparación con una expresión regular
  • preg_quote — Escapar caracteres en una expresión regular
  • preg_replace_callback — Realiza una búsqueda y sustitución de una expresión regular usando una llamada de retorno
  • preg_replace — Realiza una búsqueda y sustitución de una expresión regular
  • preg_split — Divide una cadena mediante una expresión regular


 Sintaxis para un patrón


Delimitadores:

Los delimitadores como su nombre lo dicen lo que hacen es delimitar el patrón, es decir, lo encapsulan, de esta manera después de tal delimitador es posible usar modificadores que veremos mas adelante, los delimitadores mas comunes son estos dos: / y #

/aquivaelpatron/
#aquivaelpatron#

Si en el patrón se encuentra un delimitador hay que escaparlo usando \

Meta-Caracteres

Son caracteres que son interpretados de manera especial en un patron.
Los meta-caracteres son:

\ - Caracter de escape
^ - Inicio de la cadena
$ - Final de una cadena
. - Coincide con cualquier carácter excepto nueva linea
[ - Inicio de declaracion de la clase caracter
| - Inicio de la rama alternativa es como un OR
( - Inicio de un sub-patron
) - Final de un sub-patron
? - Cuantificador 0 o 1
* - Cuantificador 0 o mas
+ - Cuantificador 1 o mas
{ - Inicio de cuantificador min/max

Dentro de los corchetes o inicio de la clase caracter algunos meta-caracteres pueden ser interpretados de diferentes formas, como son estos:

\ - Caracter de escape general
- Define rango de caracteres
] - Finaliza la clase

Secuencias de escape

Con esto podemos hacer que caracteres que tienen un significado especial tomen su significado literal. Por ejemplo:

\* - seria igual a *

Otro uso que se les puede dar es poder codificar caracteres no imprimibles, por ejemplo:

\f - salto de pagina (0c hex)
\n - nueva linea (0a hex)
\r - retorno de carro (0d hex)
\t - tabulador (09 hex)

Otro uso que se les puede dar es para especificar tipos de caracteres genericos, por ejemplo:

\d - cualquier digito decimal
\D - cualquier caracter que no es un digito decimal
\s - cualquier caracter espacio en blanco
\S - cualquier caracter que no es un espacio en blanco
\w - cualquier caracter palabra
\W - cualquier caracter que no es palabra

Modificadores

Los modificadores son las opciones que puede tener un patron, por ejemplo:

i - puede contener mayusculas o minusculas
m - trata una cadena como una sola linea aunque contenga varias lineas
s - si se usa un metacaracter . y este modificador acepta todos los caracteres incluyendo nuevas lineas



Creando nuestros patrones

Ahora crearemos un par de patrones para validar algunas cosas que podrian ser importantes... para ello como las expresiones regulares son un poco confusas muchas veces usaremos http://gskinner.com/RegExr/ tambien existe una version para escritorio.
Esto nos hace mas fácil algunas cosas como ver expresiones regulares que ya están creadas por la comunidad, como crear nuestra expresión y ponerla a prueba viendo si coincide una palabra con el patrón. Veamos algunos ejemplos, antes quiero decirles que no todos son seguros es por eso que hay que hacerlos los mas seguros posibles, ahora veamos un ejemplo:



Ahora vemos la imagen de la izquierda
podemos ver como el patron es el sig:

\w+@\w+\.\w{2,4}

este patron indica lo siguiente:

puede contener cualquier palabra 1 o mas veces
luego un arroba
luego cualquier palabra 1 o mas veces
luego un punto . (gracias al caracter de escape)
luego cualquier palabra 2 veces como min 4 como maximo


Como podemos ver pusimos algunas palabras
las que estan en azul quiere decir que coinciden
es decir que son correctas o validas con el patron
anterior, entonces arthusu@gmail.com es el unico correcto, y los demas
patrones como arthusutest, arthusu@,arthusu@gmail.informacion,arthusu@gmail-com no coinciden segun el patron anterior es decir no son validos :D

como podemos ver le hemos agregado algunos modificadores aunque el unico que funcionaria en php seria el modificador i que es insensible a mayusculas o minusculas, ahora podriamos aplicar esto en un php, veamos un video de ejemplo:



Aqui les dejo un video de demostracion:





1 comentario: