martes, 29 de julio de 2014

Procesamiento de las cadenas de caracteres en PHP - 2 de 2



2. Las expresiones regulares

Las expresiones regulares permiten realizar búsquedas o sustituciones muy complejas en una cadena de caracteres.

Por ejemplo, si quiere saber si un correo electrónico contiene el carácter @ y el carácter . o si quiere cambiar el formato de una fecha del inglés al español, el uso de expresiones regulares permiten hacerlo en un solo registro.

En este soporte, utilizaremos PCRE (Perl-Compatible Regular Expression), que usa las funciones de expresiones regulares más rápidas. También disponemos de POSIX (Portable Operating System Interface), donde las funciones comienzan por ereg, pero hoy en día están obsoletas. La codificación debe hacerse en ANSI en Notepad++, para que los siguientes ejemplos funcionen correctamente.
  • La función preg_match() devuelve verdad si el valor que se busca está en la cadena de caracteres.

Por ejemplo:

<?php
if (preg_match("/web/","El webdesigner crea un sitio web.")) {
echo "Se ha encontrado la cadena web.";
}
else {
echo "La cadena Web no se ha encontrado.";
}
?>

Da como resultado:

La cadena Web se ha encontrado.

Por tanto, su sintaxis es:

$existe = preg_match ($pattern,$cadena);

con $existe de tipo booleano.

$pattern es una cadena que indica a la función preg_match()cómo debe realizar la búsqueda. Esta cadena empieza y termina con un delimitador que suele ser el símbolo /. Aunque también podrá ver el símbolo #.

En el siguiente ejemplo, la función preg_match()comprueba si la cadena "El webdesigner crea un sitio Web." contiene la cadena "Web".

Esta función tiene en cuenta las mayúsculas y las minúsculas.

Por ejemplo:

<?php
if (preg_match("/WEB/","El webdesigner crea un sitio Web.")) {
echo "La cadena Web se ha encontrado.";
}
else {
echo "La cadena Web no se ha encontrado.";
}
?>

Da como resultado:

La cadena Web no se ha encontrado.

Porque la palabra WEB es distinta de Web.
  • La función preg_replace() sustituye el contenido por otro que pasa en argumento. Esta función devuelve la cadena de caracteres transformada.

Por tanto su sintaxis es:

$cadena_transformada =
preg_replace($pattern,$cadena_para_sustituir,$cadena original);
  • a. Las mayúsculas y las minúsculas

Si no quiere tener en cuenta las mayúsculas y las minúsculas, solo tiene que agregar i después del último /.

Por ejemplo:

<?php
if (preg_match("/WEB/i","El webdesigner crea un sitio Web.")) {
echo "La cadena Web se ha encontrado.";
}
else {
echo "La cadena Web no se ha encontrado.";
}
?>

Da como resultado:

La cadena Web se ha encontrado.

Como puede observar, la búsqueda se realiza gracias al patrón de búsqueda (pattern). Puede agregarle muchas otras opciones. Vamos a ver las más utilizadas.
  • b. Búsqueda de una palabra, y no una cadena

Hasta ahora, la búsqueda de la cadena de caracteres se realiza en una frase. Por ejemplo, si busca la cadena "designer":

<?php
if (preg_match("/designer/","El webdesigner crea un sitio Web."))
{
echo "La cadena designer se ha encontrado.";
}
else {
echo "La cadena designer no se ha encontrado.";
}
?>

Da como resultado:

La cadena designer se ha encontrado.

Pero si busca solamente la palabra aquellas palabras que comienzan con "designer", debe agregar \b delante de la palabra del patrón de búsqueda.

Por ejemplo:

<?php
if (preg_match("/\bdesigner/","El webdesigner crea un sitio Web."))
{
echo "La palabra designer se ha encontrado.";
}
else {
echo "La palabra designer no se ha encontrado.";
}
?>

Da como resultado:

La palabra designer no se ha encontrado.

En efecto: designer forma parte de la palabra webdesigner, pero no es una palabra propiamente dicha.

Por el contrario, si escribe:

<?php
if (preg_match("/\bweb/","El webdesigner crea un sitio Web."))
{
echo "la palabra Web se ha encontrado.";
}
else {
echo "La palabra Web no se ha encontrado.";
}
?>

Da como resultado:

La palabra Web se ha encontrado.

Si desea encontrar una palabra aislada, es suficiente con incluirla dentro de \b.

Por ejemplo:

<?php
if (preg_match("/\bsite\b/","El diseñaor web diseña un sitio web."))
{
echo "Se ha encontrado la palabra sitio.";
}
else
echo "No se ha encontrado la palabra sitio.";
}
?>

Muestra:

Se ha encontrado la palabra sitio.

  • c. El símbolo O

Este símbolo es | , y permite buscar una cadena u otra.

Por ejemplo:

<?php
if (preg_match("/webdesigner|grafista/","El webdesigner crea
un sitio Web.")) {
echo "La cadena webdesigner o la cadena grafista
se ha encontrado.";
}
else {
echo "La cadena webdesigner o la cadena grafista
no se ha encontrado.";
}
?>

Da como resultado:

La cadena webdesigner o la cadena grafista se ha encontrado.
La cadena "grafista" no existe, pero la cadena "webdesigner" sí.

  • d. Comienzo de la cadena

Este símbolo es ˆ y permite buscar una cadena empezando por una palabra.

Por ejemplo:

<?php
if (preg_match("/ˆEl/","El webdesigner crea un sitio Web.")) {
echo "La cadena comienza con la palabra ’El’.";
}
else {
echo "La cadena no comienza con la palabra ’El’.";
}
?>

Da como resultado:

La cadena comienza con la palabra ’El’.

  • e. Fin de cadena

Este símbolo es $, y permite buscar una cadena que termina con una palabra.

Por ejemplo:

<?php
if (preg_match("/web.$/","El webdesigner crea un sitio Web.")) {
echo "La cadena termina con la palabra ’Web.’.";
}
else {
echo "La cadena no termina con la palabra ’Web.’.";
}
?>

Da como resultado:

La cadena termina con la palabra ’Web.’.

  • f. Un carácter en una clase

Una clase permite definir un conjunto de caracteres que están en una cadena. Su sintaxis es [...], con los caracteres dentro de los corchetes.

Por ejemplo:

<?php
if (preg_match("/b[oi]n/","de otra manera este sitio Web es bonito.")) {
echo "La cadena contiene la cadena bon o bin.";
}
else {
echo "La cadena no contiene la cadena bon o bin.";
}
?>

Da como resultado:

La cadena contiene la cadena bon o bin.

La expresión regular es verdadera si contiene la cadena "bon" o la cadena "bin".

Si escribe: preg_match("/b[aieu]n/",(cadena de caracteres))" entonces la expresión regular sería verdadera si contiene la palabra "ban" o "bin" o "ben" o "bun".

Por ejemplo:

<?php
if (preg_match("/b[aou]n$/","de otra manera este sitio Web es bonito."))
{
echo "La cadena termina con la palabra ban o bon o bun.";
}
else {
echo "La cadena no termina con la palabra ban o bon o bun.";
}
?>

Da como resultado:

La cadena no termina con la palabra ban o bon o bun.

De este modo, se ha añadido un carácter $ al final de la expresión regular y por tanto la cadena debe terminar con las palabras ban, bon o bun.

  • g. Rango de caracteres en una clase

Resulta muy tedioso escribir todas las letras del alfabeto y los dígitos del 0 al 9 en una clase. Afortunadamente, el símbolo - (guión), permite definir un rango de caracteres o números.

Por ejemplo:

<?php
if (preg_match("/p[a-z]e/","En el puerto de Amsterdam.")) {
echo "La cadena contiene la cadena pue.";
}
else {
echo "La cadena no contiene la cadena pue.";
}
?>

Da como resultado:

La cadena contiene la cadena pue.

La expresión regular es verdadera si la cadena contiene otra cadena que comienza con p, seguida de cualquier otra letra del alfabeto y después una e. Por tanto, la palabra "puerto" encaja bien en este supuesto.

Otro ejemplo:

<?php
if (preg_match("/ [0-9]/","Esta fruta cuesta 10 euros.")) {
echo "La cadena contiene un espacio y una cifra entre 0 y 9.";
}
else {
echo "La cadena no contiene un espacio y una cifra entre 0 y 9.";
}
?>

Da como resultado:

La cadena contiene un espacio y una cifra entre 0 y 9.

La expresión regular es verdadera si la cadena contiene un espacio seguido de una cifra entre 0 y 9. Como la cadena contiene el número 10 precedido de un espacio, cumple la expresión regular.

  • h. La no presencia de un rango de caracteres en una clase

Si no quiere los caracteres de una clase, tiene que agregar el símbolo ˆ al principio de la clase. Este símbolo es el mismo que el que indica la palabra al comienzo de la cadena.

Por ejemplo:

<?php
if (preg_match("/n[ˆa-z]/","Ponemos una admiración!")) {
echo "La cadena contiene la letra ’n’ seguida de un carácter no
alfabético.";
}
else {
echo "La cadena no contiene la letra ’n’ seguida de un carácter no
alfabético.";
}
?>

Da como resultado:

La cadena contiene la letra ’n’ seguida de un carácter no alfabético.

En efecto, la palabra admiración contiene una letra n seguida de un carácter que no es una letra, por lo que la expresión regular devuelve verdadero.

  • i. Los cuantificadores

Los cuantificadores sirven para definir el número de veces que se repite un carácter o una clase. Los tres principales cuantificadores son:

El símbolo ?: indica que no aparece el carácter o la clase anterior.

Por ejemplo:

<?php
if (preg_match("/da?m/","En el puerto de Amsterdam.")) {
echo "La cadena contiene dam o dm.";
}
else {
echo "La cadena no contiene dam o dm.";
}
?>

Da como resultado:

La cadena contiene dam o dm.

La expresión regular busca en la cadena "En el puerto de Amsterdam" la letra d seguida de la letra a y de la letra m.

El símbolo + indica una o varias apariciones del carácter o de la clase anterior.

Por ejemplo:

<?php
if (preg_match("/da+m/","En el puerto de Amsterdam.")) {
echo "La cadena contiene dam o daam o daaam...";
}
else {
echo "La cadena no contiene dam o daam o daaam...";
}
?>

Da como resultado:

La cadena contiene dam o daam o daaam...

La expresión regular busca en la cadena "En el puerto de Amsterdam" la letra d seguida de una o varias veces la letra a y de la letra m.

El símbolo * indica cero, una o varias apariciones del carácter o de la clase anterior.

Por ejemplo:

<?php
if (preg_match("/da*m/","En el puerto de Amsterdam.")) {
echo "La cadena contiene dm o dam o daam o daaam...";
}
else {
echo "La cadena no contiene dm o dam o daam o daaam...";
}
?>

Da como resultado:

La cadena contiene dm o dam o daam o daaam...

La expresión regular busca en la cadena "En el puerto de Amsterdam" la letra d seguida de una o varias veces la letra a y seguida de la letra m.

  • j. Intervalos de reconocimiento

Sirven para definir con precisión cuántas veces se puede repetir un carácter o un grupo de caracteres. Este intervalo se realiza con las llaves {}.
  • Si quiere que la letra "a" se repita exactamente dos veces, la expresión regular es: a{2}
  • Si quiere que la letra "a" se repita al menos dos veces, la expresión regular es: a{2,}
  • Si quiere que la letra "a" se repita entre dos y cinco veces, la expresión regular es: a{2,5}

Por ejemplo:

<?php
if (preg_match("/1{1,}/","N° de teléfono:0034912569875.")) {
echo "Está por lo menos una vez el número 1 en su N° de
teléfono.";
}
else {
echo "No está el número 1 en su N° de teléfono.";
}
?>

Da como resultado:

Está por lo menos una vez el número 1 en su N° de teléfono.

Si en su expresión regular pone una cadena con un ?, por ejemplo, si quiere buscar la cadena "¿Quién?", no tiene que interpretar el ? como un cuantificador que indica 0 o 1 del carácter anterior. Para evitar esto, tiene que usar el símbolo \ (barra invertida) que permite evitar el símbolo siguiente \, es decir, no interpretarlo como un símbolo, sino como un carácter.

Por ejemplo:

<?php
if (preg_match("/\?/","¿Quién esta ahí?")) {
echo "Está el carácter ? en su frase.";
}
else {
echo "No está el carácter ? en su frase.";
}
?>

Da como resultado:

Está el carácter ? en su frase.

Atención: Los símbolos ?, +, ˆ, *, $ se interpretan como caracteres, y no como símbolos de expresiones regulares cuando están dentro de una clase [...].

Observe que resulta muy difícil escribir una expresión regular. Por fortuna, puede encontrar fácilmente en Internet las expresiones regulares más utilizadas.

A continuación encontrará una expresión regular que comprueba si una dirección de correo electrónico es válida:

<?php
$email = "Juan.lopez@españa.es";
if (preg_match("/ˆ[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$/",
$email)) {
echo "La dirección de correo electrónico es válida.";
}
else {
echo "La dirección de correo electrónico no es válida.";
}
?>

Da como resultado:

La dirección de correo electrónico es válida.




Espero haber ayudado en algo. Hasta la próxima oportunidad!







No hay comentarios:

Publicar un comentario

       

Etiquetas

Accediendo a datos con ADO .NET (31) Acceso a la red (30) Algoritmo (34) Algoritmos en JAVA (2) Ampliación de clases (2) APRENDA A PROGRAMAR COMO SI ESTUVIERA EN PRIMERO - Autores : IKER AGUINAGA (3) APRENDA A PROGRAMAR COMO SI ESTUVIERA EN PRIMERO - Autores : IKER AGUINAGA (10) Aprendiendo a desarrollar en Windows 8 (5) Aprendiendo UML en 24 Horas (Autor : Joseph Schmuller ) (30) Arquitectura (29) Arquitectura del Computador (3) Arquitectura del Computador - Historia de la informática (1) Asignación de direcciones IP (23) Aspectos fundamentales de bases de datos (5) Auditoría de la dirección (2) Auditoría de Sistemas (3) Auditoría Informática - Un enfoque práctico - Mario G . Piattini y Emilio del Peso (7) Avanzado (23) Base de Datos (67) Básico (23) Bios (29) Business Productivity Online Suite - BPOS (3) Capa de Red (22) Capa de Transporte (16) Capítulo 1 - Documentos HTML5 (6) Capítulo 10. API Web Storage (2) Capítulo 11. API IndexedDB (4) Capítulo 12. API File (1) Capítulo 2. Estilos CSS y modelos de caja (7) Capítulo 3. Propiedades CSS3 (4) Capítulo 4. Javascript (6) Capítulo 5. Video y audio (6) Capítulo 6. Formularios y API Forms (8) Capítulo 7. API Canvas (5) Capítulo 8. API Drag and Drop (2) Capítulo 9. API Geolocation (2) CCNA1 v5.0 (239) CCNA1 v6.0 (23) CCNA2 v5.0 (26) CCNA3 v5.0 (25) CCNA4 v5.0 (23) CD-ROM (3) Chapter 1 How does Xamarin.Forms fit in? (7) Chapter 2 Anatomy of an app (5) Cisco (341) Cloud Computing (3) CNNA v5.0 Routing & Switching (260) CNNA v6.0 Routing & Switching (2) Codigo (2) Computadora (32) Configuración (29) Configuración de un sistema operativo de red (21) Control (29) Creación de tipos de datos y tablas (3) Creación y Administración de bases de datos (3) Creando la Interface de la Aplicación Windows (50) Creating Mobile Apps with Xamarin.Forms (13) Cuenta (29) Curso (32) Curso Aprendiendo a Programar (25) Datos (3) Desarrollando en Windows 8 - AVANZADO (2) Desarrollando en Windows 8 - BÁSICO (3) Desarrollando en Windows 8 - INTERMEDIO (2) Desarrollo (2) Desarrollo .Net (21) Desarrollo avanzado de Windows Store Apps usando C# (1) Desarrollo basado en conceptos de Ingeniería de Software para Visual Studio (2) DESARROLLO DE APLICACIONES WINDOWS CON MICROSOFT .NET (37) DESARROLLO DE APLICACIONES WINDOWS CON MICROSOFT .NET (Autor: Luis Dueñas Huaroto) (29) Desarrollo en Microsoft Visual Studio (44) Desarrollo en Microsoft Visual Studio - AVANZADO (15) Desarrollo en Microsoft Visual Studio - BÁSICO (14) Desarrollo en Microsoft Visual Studio - INTERMEDIO (18) Desarrollo en Windows Phone 8 (13) Diagnostico (4) Diagrama (3) Diagramas de actividades (2) Diagramas de colaboraciones (2) Diagramas de secuencias (2) Digital (2) Diplomado (2) Disco (29) Disco Duro (4) Diseño de aplicaciones de Windows 8 en HTML 5 (7) Dispositivos Electrónicos (11) Doctorado (2) Ejemplos de algoritmos (27) El camino hacia el CSS3 (3) El diseño web flexible (6) El elemento de diseño Canvas (3) El enfoque de los sistemas (3) El flujo de un programa (2) El gran libro de HTML5 - CSS3 y Javascript - Autor: Juan Diego Gauchat (55) El principio de organicidad (7) Electrónica (2) Elementos de un sistema (5) Empresas (2) Entrada y salida (4) Entropía y neguentropía (7) Estrategia (2) Estructura de un programa Java (12) Estructuras de almacenamiento (10) Estructuras de control (6) Estructuras de las tablas en SQL Server (2) Estructuras fundamentales de los datos (2) Ethernet (21) Evolución y Familias de los Microprocesadores (15) Exámen (23) Exploración de la red (23) Extensión de clases (4) Facebook (4) Familia Intel (15) Forefront (8) Función (3) Funciones de una red (12) Funciones de una red informática (1) Fundamentos de C# para absolutos principiantes (17) Fundamentos de programación en Java (50) Generaciones de la computadora (5) Gestión (3) Gestión de riesgos - Auditoría de Sistemas (1) GONZALO MARTÍNEZ (1) Grupos Facebook (1) Harvard (29) Historia de las computadoras (11) HTML5 y CSS3 - Autor: Christophe Aubry (99) HTML5 y CSS3 aplicadal texto (7) HTML5 y CSS3 para los formularios (15) Imágenes (2) Implementación de Windows 7 (11) Información (31) Informática (29) Ingeniería (4) Instalar (29) Inteligencia (2) Inteligencia de Negocios con SQL Server (3) Intermedio (23) Internet (29) Internet Explorer 9 (3) Introducción a ASP.NET 5 (8) Introducción a Java (7) Introducción a jQuery (8) Introducción a la Auditoría de Sistemas (2) Introducción a la teoría general de sistemas (Oscar Johansen Bertoglio) (39) Introducción a Networking (2) Introducción a Window Forms (5) Introducción al acceso a datos con ADO .NET (9) Investigación de Operaciones (12) Java (52) Jump Start de consultas en las bases de datos de Microsoft SQL Server 2012 (8) La definición de un Sistema (6) La evolución del HTML y del CSS (3) La nueva sintaxis HTML5 (12) LA QUINTA DISCIPLINA en la práctica (Autor : Peter Senge) (28) Las animaciones en CSS3 (5) Las transformaciones CSS3 (11) Las transiciones con CSS3 (8) Licenciamiento Microsoft (3) Local Area Network (LAN) - Red de Area Local (2) Lógico (2) Los elementos de la estructura en html5 (9) Los elementos multimedia: audio y vídeo (2) Los estilos de caja en CSS3 (13) Los nuevos selectores de CSS3 (6) Maestría (2) Mantenimiento de Mouse y Teclado (2) Manual de Microsoft SQL Server - Full Transact SQL (68) Manual de soporte técnico para escuelas sobre windows 7 (42) Marco Teorico de Investigación de Operaciones (6) Medios de Almacenamiento (11) Medios de Networking (2) Mejorando la Interface de las Aplicaciones Windows (26) Memoria Tipos y Clases (5) Método (2) Metodología (1) Microsoft (324) Microsoft Lync 2010 (7) Microsoft Silverlight 4.0 (2) Microsoft Virtual Academy (356) Modelo (2) Modelo OSI y TCP-IP (2) Modelos con poco grado de dificultad de Programación Lineal - Investigación de Operaciones (13) Modelos con razonable grado de dificultad de Programación Lineal - Investigación de Operaciones (10) Modelos de desafio de Programación Lineal - Investigación de Operaciones (5) Modelos difíciles de Programación Lineal - Investigación de Operaciones (5) Modelos Fáciles de Programación Lineal - Investigación de Operaciones (13) Modelos lineales con solver (3) Modulo (23) Movimiento (2) Mozilla (29) MS SQL Server (77) MS Virtualization para Profesionales VMware - Gestión (3) MS Virtualization para Profesionales VMware- Plataforma (4) MVA (263) Negocio (2) Nivel Avanzado Desarrollo .Net (6) Nivel Básico Desarrollo .Net (11) Nivel Intermedio Desarrollo .Net (8) Normas técnicas peruanas y su evolución - Auditoría de Sistemas (1) Nube Privada - Avanzado (6) Nube Privada - Básico (6) Nube Privada - Intermedio (6) Office 365 (3) Optimización de Escritorio (10) Optimización de Escritorio - Avanzado (4) Optimización de Escritorio - Básico (3) Optimización de Escritorio - Intermedio (3) ORACLE 10g - ADMINISTRACIÓN Y ANÁLISIS (3) Oracle 10g y el Grid Computing (3) Organización aleatoria y secuencial (1) Partes principales de la Mainboard (12) Perceptron (2) Perfil (2) Periféricos de Entrada / Salida (15) Pesi (2) PHP y MySQL - Manual de aprendizaje para crear un sitio web - Autor : Olivier ROLLET (79) Plan (2) Plataforma (29) PMBOK (24) PMBOK - Guía de los fundamentos para la dirección de proyectos (24) PMBOK - INFLUENCIA DE LA ORGANIZACIÓN Y CICLO DE VIDA DEL PROYECTO (6) PMBOK - Introducción (11) PMBOK - PROCESOS DE LA DIRECCIÓN DE PROYECTOS (5) Prevención - Herramientas e Instrumentos de Medida (9) Principios básicos de enrutamiento y switching (213) Proceso (2) Proceso de auditoría de sistemas informáticos (2) Programación en Android - Auor : Salvador Gómez Oliver (46) Programación paso a paso de C# - Autor : Nacho Cabanes (16) Protocolos y comunicaciones de red (17) Proyecto (2) Qué es un sistema (4) Red de Área Local Inalámbrica (WLAN) (4) Redes (30) Redes inalámbricas - WIRELESS - Conocimiento general (15) Redes neuronales (2) Redes y Comunicaciones (45) Reparación de Fuentes - UPS - Estabilizadores (10) Reparación de Impresoras (9) Reparación de Monitores (16) Router (29) Seguridad en la Nube (3) Seminario (23) Server (24) Sharepoint 2010 - Nivel Básico (6) Sharepoint 2010 - Niveles Avanzados (18) Sharepoint 2010 - Niveles Avanzados - Básico (8) Sharepoint 2010 - Niveles Avanzados - Intermedio (9) Sinergia y recursividad (4) Sistema (33) Sistema de Cableado Estructurado (9) Software (30) SOLUCIÓN GRÁFICA DE MODELOS DE PROGRAMACIÓN LINEALES - INVOPE (8) Soporte a Infraestructura (3) SQL (38) SQL Azure - Introducción (3) Subsistemas de control (4) Tablas (4) Tarjeta Principal del Sistema (10) Tarjetas de Interfaces (7) Tecnología (31) Tecnologías LAN (1) TEORÍA GENERAL DE SISTEMAS (1) Tic (2) Tipo (2) TML5 y CSS3 - Autor: Christophe Aubry (12) Trabajando con el Formulario (7) Un diseño HTML5/CSS3: dConstruct 2011 (3) Un diseño HTML5/CSS3: FlipThru (2) Un diseño HTML5/CSS3: The Cat Template (2) Usando Controles Windows Forms (12) Usando Herramientas de Datos de Visual Studio (6) Ventas (2) Virtualización Hyper - V Nivel Básico (5) Virtualización Hyper - V Nivel Intermedio (5) What’s New in Windows 8.1 Security (4) Window (29) Windows 7 Segunda Fase - AVANZADO (4) Windows 7 Segunda Fase - BÁSICO (6) Windows 7 Segunda Fase - INTERMEDIO (4) Windows 8 - Vista Previa (4) Windows 8.1 To Go (2) Windows Azure (3) Windows Phone 7 (2) Windows Server 2008 R2 (3) Windows Server 2012 - Gestión y Automatización (3) Windows Server 2012 R2 Essentials (7) Windows Server 2012: Almacenamiento (5) Windows Server 2012: Identidad y Acceso (4) Windows Server 2012: Revisión Técnica (7) Xamarin (1)

Páginas vistas en total según Google