Hogar / Internet / Coincidencia de preg de expresiones regulares de PHP. Expresiones regulares en php. Reemplazo de comillas dobles con comillas tipográficas

Coincidencia de preg de expresiones regulares de PHP. Expresiones regulares en php. Reemplazo de comillas dobles con comillas tipográficas


Una de las características más poderosas y útiles. lenguaje PHP- soporte para expresiones regulares. Muchos programadores, tanto principiantes como experimentados, se sienten intimidados por la aparente complejidad y complejidad del lenguaje de expresiones regulares. Pero te puedo asegurar que vale la pena. El uso de expresiones regulares simplifica enormemente el trabajo de procesamiento de textos y datos débilmente estructurados.


Las expresiones regulares son expresiones escritas en un lenguaje especial.


No te alarmes, el idioma es bastante fácil de entender; todo lo que necesitas es experiencia y práctica. Creo que te has encontrado repetidamente con situaciones en las que tienes texto (por ejemplo, en Microsoft Word


) y necesitas encontrar algo importante en él. Si sabe exactamente lo que está buscando, todo es simple: abra el cuadro de diálogo de búsqueda, ingrese la palabra de búsqueda, presione el botón y listo, se encuentra el texto. Pero ¿qué harás si sólo sabes de antemano el tipo de información que buscas? Por ejemplo, se enfrenta a la tarea de encontrar todas las direcciones. correo electrónico

en un documento de un par de cientos de hojas. Algunos verán el documento manualmente, otros ingresarán el perro (@) en la búsqueda y lo buscarán. De acuerdo: ambas opciones son un trabajo agotador e ingrato.

Una expresión regular es una cadena de texto compuesta según ciertas leyes y reglas. Una cadena consta de caracteres y grupos de caracteres, metacaracteres, cuantificadores y modificadores.

Debajo de los símbolos en en este caso Se entiende cualquier símbolo de cualquier alfabeto. Y no sólo los legibles. Puedes insertar fácilmente un carácter ilegible en una expresión; para ello, sólo necesitas conocer su código en formato hexadecimal. Por ejemplo:

// caracteres legibles a E // caracteres y códigos ilegibles \x41 - igual que la letra "A" \x09 - carácter de tabulación

Un grupo de caracteres son varios caracteres escritos secuencialmente:

ACZms promedio

Me gustaría llamar su atención de inmediato: el "espacio" en las expresiones regulares también se considera un carácter significativo, así que tenga cuidado al escribir expresiones. Por ejemplo, estos grupos de caracteres son expresiones DIFERENTES:

ABC DONDE ABC DONDE

El siguiente elemento del lenguaje son los metacaracteres. El prefijo "meta" significa que estos símbolos describen otros símbolos o sus grupos. La tabla describe los principales metacaracteres del lenguaje de expresiones regulares:

Metacaracteres para especificar caracteres especiales
() Paréntesis. Define expresiones anidadas.
| Metacarácter de selección
^ Metacarácter de inicio de línea
$ Metacarácter de fin de línea
\norte Carácter de avance de línea (código hexadecimal 0x0A)
\r Carácter de retorno de carro (código hexadecimal 0x0D)
\ t Carácter de tabulación (código hexadecimal 0x09)
\xhh Al insertar un carácter con código hexadecimal 0xhh, por ejemplo \x42, se insertará la letra latina "B"
Metacaracteres para especificar grupos de caracteres.
. Punto. Cualquier personaje.
\d Dígito (0-9)
\D No es un número (cualquier carácter excepto los caracteres del 0 al 9)
\s Carácter en blanco (normalmente espacio y tabulación)
\S Carácter no vacío (todos excepto los caracteres identificados por el metacarácter \s)
\w Un carácter de "diccionario" (un carácter que se utiliza en palabras. Normalmente todas las letras, todos los números y un guión bajo ("_"))
\W Todos excepto los caracteres definidos por el metacarácter \w

Los metacaracteres de la segunda mitad de la tabla son muy fáciles de recordar. "d" - dígito (dígito), "s" - símbolo (símbolo), "w" - palabra (palabra). Si la letra es grande, deberá agregar "NO" a la descripción del grupo.

Tomemos, por ejemplo, el texto "La camiseta roja tiene los números 1812 y la camiseta verde tiene los números 2009". Veamos ejemplos de las expresiones regulares más simples:

\d\d\d\d - encontrará 1812 y 2009 \D - encontrará todas las letras, espacios y signos de puntuación \s - encontrará todos los espacios en el texto.

Pero el año en nuestro ejemplo se puede escribir no en cuatro, sino en dos dígitos, las palabras pueden tener otras declinaciones, etc. Los subconjuntos de caracteres que se especifican mediante corchetes pueden ayudar aquí:

Significa cualquier dígito (igual que \d) - significa un dígito par - significa cualquier símbolo del alfabeto latino (en cualquier caso) o dígito.

Por ejemplo, la expresión \d\d\d en la cadena de prueba solo encontrará 1812, pero no 2009. Esta expresión debe leerse como "buscar todas las secuencias de cuatro dígitos donde el último dígito sea 0,2,4,6 o 8".

Lo único que nos queda por mencionar son los cuantificadores y modificadores.

Un cuantificador es una construcción especial que determina cuántas veces debe aparecer un carácter o grupo de caracteres. El cuantificador está escrito entre llaves "()". Son posibles dos formatos de grabación: preciso y de alcance. El formato exacto está escrito así:

Aquí X es el número de veces que se debe repetir el símbolo o grupo anterior. Por ejemplo la expresión

La segunda forma de registro es el rango. Grabado como

(X, Y) // o (,Y) // o (X,)

donde X es el mínimo e Y es el número máximo de repeticiones. Por ejemplo:

leerse como "de dos a cuatro dígitos escritos en secuencia". Si no se especifica uno de los límites, no se supone ninguna limitación. Por ejemplo:

\w(3,) - tres o más letras. \d(,5): no hay ningún número, o los hay, pero no más de cinco.

Los cuantificadores se pueden aplicar a un solo carácter o a un grupo:

[A-Yaa-ya](1,3)

Esta construcción seleccionará del texto todas las palabras rusas de una, dos o tres letras (por ejemplo, "o", "no", "yo", "voy", etc.)

Además de las llaves, hay tres metacaracteres cuantificadores más: “*” (asterisco), “+” (más) y “?” (pregunta). Se utilizan en los casos en los que se desconoce de antemano el número mínimo y máximo de repeticiones necesarias. Por ejemplo, al buscar direcciones de correo electrónico, no puede saber de antemano cuántos caracteres habrá en el nombre de usuario (antes de "perro") y cuántos habrá en el nombre de dominio (después de "perro").

El metacarácter "*" se lee como "cualquier cantidad desde cero o más", es decir diseño

define cualquier número de letras consecutivas, incluida su ausencia total.

El símbolo "+" se diferencia de un asterisco únicamente en que requiere la presencia de al menos un carácter. Aquellos. diseño

coincide con cualquier secuencia digital con uno o más dígitos.

Símbolo "?" coincide con la ausencia o presencia de un solo carácter. Aquellos. diseño

coincide con cualquier secuencia digital con uno o dos dígitos.

Aquí vale la pena mencionar una característica de los antiificadores “*” y “+” como la codicia. La cuestión es que, por defecto, estos caracteres corresponden a la secuencia de caracteres más larga posible. Por ejemplo, para la línea "mamá lavó el marco", la expresión:

Elegiremos “mama Soap ra”, lo cual es algo inesperado, porque esperábamos obtener “ma”. Para cambiar este comportamiento, utilice el metacarácter "?" (signo de interrogación) escrito inmediatamente después del cuantificador. Limita el "apetito" de los cuantificadores al obligarlos a devolver la primera coincidencia en lugar de la más larga. Ahora cambiemos el ejemplo anterior:

y obtenga la coincidencia requerida "ma".

El último elemento del lenguaje son los modificadores. Un modificador es un carácter especial que define los parámetros del "sistema" para analizar expresiones regulares. Solo existen cuatro símbolos de este tipo y se pueden utilizar de forma individual o simultánea:

i Habilita el modo que no distingue entre mayúsculas y minúsculas, es decir. Las letras mayúsculas y minúsculas en la expresión no difieren.
metro Indica que el texto que se busca debe considerarse como si consta de varias líneas. De forma predeterminada, el motor de expresiones regulares trata el texto como una sola cadena, independientemente de lo que realmente sea. En consecuencia, los metacaracteres "^" y "$" indican el principio y el final de todo el texto. Si se especifica este modificador, entonces indicarán, respectivamente, el principio y el final de cada línea de texto.
s El metacarácter predeterminado es "." no incluye el carácter de nueva línea en su definición. Aquellos. para texto de varias líneas, la expresión /.+/ devolverá solo la primera línea, no todo el texto como se esperaba. Al especificar este modificador se elimina esta limitación.
Ud. Hace que todos los metacaracteres cuantitativos sean "no codiciosos" de forma predeterminada. En algunas modificaciones del lenguaje (en particular en PHP), en lugar de "U", se usa el carácter "g", que es más consistente con el significado ("g" es la abreviatura del inglés "greedy", "greedy" ).

La tabla muestra los ejemplos más populares y necesarios de expresiones regulares. Algunos de ellos pueden parecerle complicados y engorrosos, pero con un estudio detallado sin duda los comprenderá.

Expresiones regulares en PHP.

Para trabajar con expresiones regulares en PHP, existen funciones especiales, cuya lista breve descripción se dan en la tabla:

int preg_match (patrón de cadena, asunto de cadena [, coincidencias de matriz])

La función comprueba si el contenido del tema coincide con el patrón. Devuelve 1 si se encuentran coincidencias; de lo contrario, devuelve 0. Si especifica el parámetro de matriz de coincidencias opcional, cuando se ejecute la función, se ingresará un solo elemento: la primera coincidencia encontrada.

int preg_match_all (patrón de cadena, asunto de cadena, coincidencias de matriz [, orden int])
La función es idéntica a la anterior, con la única diferencia: busca en todo el texto y devuelve TODAS las coincidencias encontradas en la matriz de coincidencias.
preg_replace mixto (patrón mixto, reemplazo mixto, asunto mixto [, límite int])
Al igual que sus dos funciones predecesoras, preg_replace busca un fragmento de texto que coincida con un patrón. La función reemplaza todos los fragmentos encontrados con el texto especificado en los parámetros.
preg_replace_callback mixto (patrón mixto, devolución de llamada mixta, asunto mixto [, límite int])
La función es una versión extendida de la anterior. La principal diferencia es que a esta función se le pasa en los parámetros el nombre de la función que analizará el texto y generará texto de reemplazo.
matriz preg_split (patrón de cadena, asunto de cadena [, límite int [, banderas int]])
Esta función es similar a las funciones explotar() y dividir(). Su peculiaridad es que el separador no es una cadena fija, sino una expresión regular. La función divide los datos de origen en elementos y los coloca en la matriz de salida.
matriz preg_grep (patrón de cadena, entrada de matriz)
La función está diseñada para búsquedas regulares en matrices. Para la búsqueda, se especifican una plantilla y una matriz de datos de entrada, y se devuelve una matriz que consta únicamente de elementos que coinciden con la plantilla.

La lista de funciones consideradas está lejos de ser completa, pero es suficiente para empezar con éxito a trabajar con expresiones regulares. Si está interesado en este tema, asegúrese de leer literatura adicional (por ejemplo, el libro de Friedl "Expresiones regulares"). Además, para fines de capacitación, recomiendo instalar uno de programas especiales para probar expresiones regulares (por ejemplo, "PCRE" o "RegEx Builder").

Comencemos con qué es una expresión regular. Entonces respóndeme a esta pregunta: ¿hay una “e” en la palabra “prueba”? "¡Comer!" dices. Entonces te hago una segunda pregunta, ¿cómo encontraste la letra "e" en la palabra "prueba"? La respuesta es obvia, tomamos el primer carácter, es decir, “t” y lo comparamos con lo que buscamos, es decir, con “e”. Si no son iguales, entonces tomamos el segundo carácter, es decir, “e”, y lo comparamos con lo que buscamos, es decir, “e”. ¡Voilá! Se encontró una coincidencia. Respuesta: La palabra "prueba" contiene la letra "e".

Ahora respóndeme una pregunta más, ¿dónde está la expresión regular en este ejemplo? Espero que hayas adivinado que la expresión regular aquí es lo que buscamos en la palabra "prueba". Es decir, la letra "e" en este ejemplo es una expresión regular.

¿Para qué se utilizan las expresiones regulares en PHP? En mi práctica, se utilizaban expresiones regulares, por ejemplo, para determinar si una dirección de correo electrónico estaba escrita correctamente. Estas expresiones también se utilizan para determinar la exactitud del nombre de usuario y la contraseña. Usando expresiones regulares, puede encontrar la dirección en un enlace y guardarla. Hay muchas cosas que puedes hacer. Al analizar esto, puedes identificar la función principal de las expresiones regulares y dos funciones secundarias. Función principal, esta es una búsqueda de coincidencias en una cadena. Los efectos secundarios incluyen guardar las coincidencias encontradas y reemplazarlas.

Primera expresión regular

En teoría, sabemos cómo encontrar el carácter "e" en la palabra "prueba", pero ¿cómo se implementa esto en la práctica? Para utilizar expresiones regulares en php se suelen utilizar las siguientes funciones:

preg_match("expresión regular (patrón)", "variable en la que se realiza la búsqueda", "Variable en la que se guarda el resultado de la búsqueda (parámetro opcional)"); - Función de coincidencia
preg_replace("expresión regular (patrón)", "Con qué reemplazar la coincidencia encontrada", "variable en la que se realiza el reemplazo"); - Reemplazar función

Comencemos a usar estas funciones. Aquí hay un ejemplo de búsqueda del carácter "e" en la palabra "prueba":

$a = "prueba";
if(preg_match("/e/",$a)) echo "encontrado!";

El código describe la condición: si se encuentra algo que coincida con el patrón en la variable $a, se muestra el mensaje "¡¡encontrado!!" Como habrás notado, nuestra plantilla se encuentra entre dos "/". En este caso, el símbolo "/" simboliza el principio y el final de nuestro patrón. Espero que esto quede claro.

Todo esto es interesante, por supuesto… pero nuestra plantilla es muy sencilla, ¿no crees? Después de todo, rara vez necesitamos encontrar algún símbolo en una variable. En la mayoría de los casos, necesitamos encontrar muchos personajes, y también desconocidos. ¿Cómo puede ser esto? Plantémonos un problema e intentemos solucionarlo. Supongamos que tenemos una cadena que consta de números y una letra inglesa desconocida.

¿Cómo encontrar esta carta? Podría haber cualquier letra del alfabeto inglés, entonces, ¿cómo puedes identificarla? Tú mismo respondiste tu pregunta, hay cualquier letra, es decir, está en el rango de la a a la z. Puede utilizar rangos en expresiones regulares. Si no sabemos qué carácter estamos buscando, pero sabemos con certeza que ese carácter es una letra del alfabeto inglés, entonces la entrada será la siguiente:

$a = "123a321";
if(preg_match("//",$a)) echo "encontrado!";

Tenga en cuenta que el rango está entre corchetes "[" "]". Todo lo incluido entre estos corchetes se define como un solo carácter; en este caso, el carácter va de la a a la z. Si necesitamos encontrar no una letra, sino un número, entonces la entrada será así:

$a = "abc1cba";
if(preg_match("//",$a)) echo "encontrado!";

También quiero señalar que las expresiones regulares distinguen entre mayúsculas y minúsculas, por lo que los caracteres “A” y “a” son completamente diferentes, para buscar ambos caracteres, escribe así:

$a = "123a321";
if(preg_match("//",$a)) echo "encontrado!";

También existe una búsqueda de letras rusas, que se realiza de la misma forma que con las inglesas:

$a = "123×321";
if(preg_match("/[a-zA-Z]/",$a)) echo "encontrado!";

Metacaracteres

Aprendimos cómo buscar un carácter desconocido en una cadena. ¿Qué hacer si necesitamos encontrar varios personajes? Los llamados metasímbolos vienen al rescate... Supongamos que tenemos una cadena con números y letras, ¿cómo podemos describirla en la plantilla? Puedes hacer esto:

línea - 123a321
muestra -

Hmm... la plantilla en realidad coincide con nuestra cadena, y cuando se verifique su cumplimiento, ¡dará la verdad tan esperada! Pero es un registro un tanto engorroso, ¿no crees?

He aquí cómo acortarlo:

línea - 123a321
muestra - *

Me parece que es más corto ¿Qué es el símbolo “*”? Este es el mismo metasímbolo, lo que significa que el símbolo que describimos (es decir, un símbolo que puede contener números del 0 al 9 o letras del alfabeto inglés, de la a a la z) se puede repetir indefinidamente o más de una vez. ¡Sí, sí! Este metasímbolo encontrará una coincidencia en una variable vacía, ya que incluso la ausencia del símbolo que describimos devolverá verdadero. recuerda esto

¿Qué otros metacaracteres hay?

Por ejemplo, el metacarácter "+" es casi similar al metacarácter "*" con una pequeña excepción. "*" devolverá verdadero incluso si no hay ningún carácter, y "+" comprobará la presencia de al menos un carácter. Es decir, si una línea requiere al menos un carácter, utilice "+" en lugar de "*"

El metacarácter "?" también se utiliza a menudo. Significa que la línea no debe contener más de un carácter deseado. Permítanme dar un par de ejemplos de los dos últimos metacaracteres que describí.

Supongamos que necesitamos verificar que la contraseña del usuario sea correcta. Pensemos en lo que debe contener la contraseña de usuario. Bueno, en primer lugar, debe ser al menos un personaje. En segundo lugar, debe contener sólo números y letras del alfabeto inglés, por lo que la expresión regular se verá así:

$a = "qwerty12345";

¿Qué personajes permitimos? Letras inglesas de cualquier caso y números. Ahora intenta dejar una línea en blanco en lugar de la contraseña.

$a = "";
if(preg_match("/+/",$a)) echo "La contraseña es correcta";

No verá el mensaje "La contraseña es correcta". ¿Por qué? Porque el metacarácter "+" verificó la cadena para ver si tenía al menos un carácter.

Y ahora un pequeño truco, echemos un vistazo a nuestra expresión, no permitimos, bueno, digamos un espacio en ella, ¿no? ponga un espacio al final de la contraseña y ejecute

$a = "qwerty12345";
if(preg_match("/+/",$a)) echo "La contraseña es correcta";

¿Y por qué vemos nuestro mensaje sobre la contraseña correcta? Es bastante simple... Función preg_match(); deja de comprobar en el primer partido. Es decir, el símbolo “q” se ajusta al patrón que describimos y todo lo demás ya no es importante para la función. ¿Qué debemos hacer? Aquí se explica cómo solucionarlo:

$a = "qwerty12345";
if(preg_match("/^+$/",$a)) echo "La contraseña es correcta";

Al agregar un "^" al comienzo de una expresión y un "$" al final, le decimos a la función que toda la cadena debe coincidir con el patrón. Si ejecuta este código, no verá el mensaje, ya que hay un carácter ilegal al final de la contraseña: un espacio.

Ahora cambie el metacarácter "+" por el metacarácter "?". ¿Qué crees que pasará? Correctamente, no habrá ningún mensaje sobre la exactitud de la contraseña, ya que la contraseña contiene más de un carácter. Espero haber explicado adecuadamente el trabajo de estos tres metacaracteres de uso frecuente.

A veces "no" es mejor

Al menos hemos aprendido a comprobar que la contraseña es correcta, ¡y eso es bueno! Déjame hablarte de otra forma de buscar algo en una cadena. Digamos que necesitamos verificar la ausencia de números en una cadena. ¿Cómo hacer esto? Aquí está la línea:

(Introduje específicamente estos símbolos “-_+()” para que la vida no pareciera miel...) Podríamos formular la siguiente expresión:

Pero debes admitir que no siempre sabemos qué caracteres se usan en una línea, ¡pero sabemos con certeza que no debería haber números en ella! Por lo tanto, sería más lógico simplemente escribir una plantilla que omitiera líneas que no contengan números, y no aquellas que contengan "¡¡¡Dios mío, cuántos caracteres incomprensibles!!!" . A continuación se muestra un ejemplo de una expresión compuesta correctamente para este tipo de problemas:

$a = "a-_+()";
if(preg_match("/^[^0-9]+$/",$a)) echo "¡Sin números!";

¿Cómo logramos esto? Ingresamos el símbolo, ¡pero!

Bueno, terminemos lentamente... Daré dos ejemplos con explicaciones, durante los cuales aprenderemos cómo guardar el resultado de la búsqueda en una variable y cómo verificar que la dirección postal sea correcta.

¡Lo vi y lo guardé!

mi blog

$a = " mi blog";
preg_match("/ /", $a);

En nuestra expresión regular, describimos todos los caracteres posibles que se pueden incluir en un enlace. También quiero prestar atención a las comillas y los caracteres “/” en nuestra expresión. Están precedidos por una barra invertida, ¿para qué sirve? El hecho es que "/" y la comilla son en sí mismos caracteres especiales. Y para que la plantilla los perciba como símbolos ordinarios, debemos filtrarlos. La adaptación de la pantalla se realiza añadiendo una barra invertida antes de los caracteres especiales. espero que quede claro

$a = " mi blog";
preg_match("/ /", $a, $b);

Bueno, en consecuencia, es necesario agregar un parámetro adicional en forma de variable $b, en el que se almacenará el enlace encontrado. También necesita saber que el resultado de la búsqueda se coloca en una matriz. Por tanto, la variable $b es una matriz. La información que buscamos está bajo el índice 1. Esto significa que el resultado de la búsqueda está en la variable $b. Mostremos el resultado en la pantalla:

$a = " mi blog";
preg_match("/ /", $a, $b);
eco $b;

¡La dirección correcta es la clave del éxito!

Y por último, la respuesta a la pregunta ¿es correcto el correo electrónico? Primero, ¿necesita saber qué caracteres están permitidos en las direcciones? Hasta donde yo sé, los caracteres permitidos incluyen:

  • Letras en inglés, números, “_”, “-” ummmm todo parece ser... Partiremos de esto.
  • A continuación tenemos "@"
  • Después, letras inglesas.
  • Siguiente, punto
  • Y de nuevo letras inglesas...

Entonces la expresión regular será la siguiente:

$a = " [correo electrónico protegido]";
if(preg_match("/^+@+.+$/", $a)) echo "¡la dirección de correo electrónico es correcta!";
else echo "¡la dirección de correo electrónico NO está escrita correctamente!";

Bueno... espero que esos registros no te asusten ahora y que puedas comprenderlos perfectamente.

Por último, quiero decir algo. El artículo resultó engorroso y, al mismo tiempo, cubría sólo una parte de las posibilidades. Si estás leyendo esta frase, lo más probable es que la hayas leído hasta el final, por lo que muchas gracias.

En cuanto a la serie de artículos sobre el desarrollo de un blog cms, ¡declaro cerrada la primera parte de la serie!

Las expresiones regulares le permiten encontrar secuencias en una cadena que coincidan con un patrón. Por ejemplo, la plantilla "Vasya(.*)Pupkin" le permitirá encontrar una secuencia cuando haya cualquier número de caracteres entre las palabras Vasya y Pupkin. Si necesitamos encontrar seis dígitos, escribimos "(6)" (si, por ejemplo, de seis a ocho dígitos, entonces "(6,8)"). Esto separa cosas como el indicador de juego de caracteres y el indicador de número requerido:

En lugar de un conjunto de caracteres, se puede utilizar la designación de cualquier carácter: se puede especificar un conjunto específico de caracteres (se admiten secuencias, el mencionado "0-9"). Puede indicar "excepto este conjunto

personajes". El número de caracteres se denomina "cuantificador" en la documentación oficial de PHP. El término es conveniente y no da lugar a malentendidos. Entonces, un cuantificador puede tener un valor específico, ya sea un valor fijo ("(6)"), un intervalo numérico ("(6,8)"), o un abstracto "cualquier número, incluido 0" ("( " *"), "cualquier número natural

" - de 1 a infinito ("+": "document+.txt"), "0 o 1" ("?"). El cuantificador predeterminado para este conjunto de caracteres es uno ("document.txt").

Para una búsqueda más flexible de combinaciones, estos enlaces "conjunto de caracteres - cuantificador" se pueden combinar en metaestructuras.

Como cualquier herramienta flexible, las expresiones regulares son flexibles, pero no del todo: su área de aplicación es limitada. Por ejemplo, si necesita reemplazar una cadena fija en el texto por otra fija nuevamente, use str_replace. Los desarrolladores de PHP le ruegan entre lágrimas que no utilice funciones complejas ereg_replace o preg_replace para este propósito, porque cuando se llaman, se produce el proceso de interpretación de cadenas, y esto consume seriamente recursos del sistema. Desafortunadamente, este es el rastrillo favorito de los programadores PHP principiantes. Utilice funciones de expresión regular sólo si no sabe exactamente qué cadena hay. Ejemplos: código de búsqueda en el que se eliminan los caracteres de servicio y las palabras cortas de la cadena de búsqueda, así como los espacios adicionales (o más bien, todos los espacios se comprimen: "+" se reemplaza por un espacio). Usando estas funciones, reviso el correo electrónico del usuario que deja su reseña. Se pueden hacer muchas cosas, pero es importante tener en cuenta que las expresiones regulares no son todopoderosas. Por ejemplo, una sustitución compleja en Es mejor no hacerlos. Después de todo, por ejemplo, la combinación "(.*)" en términos de programa significa buscar entre todos los caracteres del texto. Y si la plantilla no está vinculada al principio o al final de la línea, entonces el programa "mueve" la plantilla a lo largo de todo el texto y el resultado es una búsqueda doble, o más bien una búsqueda al cuadrado. No es difícil adivinar que otra combinación “(.*)” significa iterar sobre un cubo, y así sucesivamente. Eleve, digamos, 5 kilobytes de texto a la tercera potencia. Resultan 125.000.000.000 (en palabras: ciento veinticinco mil millones de operaciones). Por supuesto, si se adopta un enfoque estricto, no habrá tantas operaciones, sino de cuatro a ocho veces menos, pero el orden de los números en sí es importante.

conjunto de caracteres
. puntocualquier personaje
[] corchetesclase de carácter ("cualquiera de"). Por ejemplo
[^] clase de carácter negativo ("cualquiera excepto")
- estrellarsedesignación de secuencia en una clase de caracteres ("" dígitos)
\d Sólo números
\D[^0-9] además de los números
\w Letras y números
\W[^a-z0-9]Además de letras y números
\s Caracteres de espacios en blanco: espacio, tabulación, nueva línea
\S[^ ] Excepto los espacios en blanco
| (uno|otro)En este lugar puede haber una de las opciones enumeradas, por ejemplo: (Vasya|Petya|Masha). Si no desea que se incluya en la selección, utilice (?: ...)

No utilice una clase de carácter para indicar solo uno (en lugar de "+", "+" funcionará bien). No escriba un punto en la clase de carácter; este es cualquier carácter, entonces otros caracteres en la clase simplemente serán superfluos (y en clase negativa esto resultará en la negación de todos los caracteres).

Cuantificador

Un cuantificador puede indicar tanto un valor específico como límites. Si el número especificado está dentro de los límites del cuantificador, se considera que el fragmento de expresión coincide con la cadena que se está analizando. Sintaxis:

{ }

{ , }

Si necesitas indicar solo el mínimo requerido, pero no hay un máximo, simplemente pon una coma y no escribas el segundo número: “(5,)” (“mínimo 5”). Existen notaciones especiales para los cuantificadores más utilizados:

En la práctica, estos símbolos se utilizan con más frecuencia que las llaves.

Anclas

Estos caracteres deben aparecer al principio y al final de la línea, respectivamente.

Avaricia El signo de interrogación también actúa como un cuantificador minimizador:
.*?

El resultado del ejemplo: Versión codiciosa: texto en negrita [b] y aquí - se devolvió aún más negrita Versión perezosa: texto en negrita [b] y aquí - se devolvió aún más negrita

La línea de la plantilla, como ya habrás notado, comienza y termina con barras. Después del segundo hay parámetros:

ibúsqueda que no distingue entre mayúsculas y minúsculas
metro

modo multilínea. De forma predeterminada, PCRE solo busca coincidencias de patrones dentro de una sola línea, y los caracteres "^" y "$" coinciden solo con el principio y el final de todo el texto.

sCuando se configura esta opción, "^" y "$" coinciden con el principio y el final de las líneas individuales.
símbolo "." (punto) también coincide con el salto de línea (no predeterminado)A
anclar al comienzo del textomi
Ud.obliga al carácter "$" a coincidir solo con el final del texto.
Se ignora si se establece el parámetro m.Invierte "codicioso" para cada cuantificador (si un cuantificador va seguido de "?", ese cuantificador ya no es "codicioso").
mi
  • La cadena de reemplazo se interpreta como código PHP.
  • Funciones para trabajar con expresiones regulares. preg_grep preg_match: realiza una verificación de coincidencias
  • expresión regular
  • . ¡Esta función solo busca la primera coincidencia! preg_match_all preg_quote: escapa de caracteres en expresiones regulares.
  • Aquellos. inserta barras antes de todos los caracteres de servicio (por ejemplo, paréntesis,
  • corchetes
  • etc.) para que se tomen literalmente. Si tiene alguna entrada del usuario y la está verificando usando expresiones regulares, entonces es mejor escapar los caracteres de servicio en la variable entrante antes de hacerlo.
preg_replace

preg_replace_callback: realiza búsqueda y reemplazo de expresiones regulares

preg_split

preg_grep

Función preg_grep: devuelve una matriz de ocurrencias que coinciden con un patrón

Sintaxis

matriz preg_grep (patrón de cadena, entrada de matriz [, int flags])
preg_grep() devuelve una matriz que consta de los elementos de la matriz de entrada que coinciden con el patrón dado. El parámetro flags puede tomar los siguientes valores: PREG_GREP_INVERT
Si se establece este indicador, la función preg_grep() devuelve aquellos
elementos de matriz

, que no coinciden con el patrón dado.

El resultado devuelto por preg_grep() utiliza los mismos índices que la matriz de datos original. Si este comportamiento no le conviene, utilice array_values() en la matriz devuelta por preg_grep() para reindexar.

Código de muestra:

preg_split

// Devuelve todos los elementos de la matriz // que contienen números de punto flotante $fl_array = preg_grep("/^(\d+)?\.\d+$/", $array);

partido_preg Función preg_match: realiza una coincidencia con una expresión regular Si se especifican coincidencias, se completará con los resultados de la búsqueda. El elemento $matches contendrá la parte de la cadena que coincide con el patrón completo, $matches contendrá la parte de la cadena que coincide con el primer subpatrón, y así sucesivamente.

Las banderas pueden tomar los siguientes valores:

PREG_OFFSET_CAPTURE

La búsqueda se realiza de izquierda a derecha, desde el inicio de la línea. El parámetro de desplazamiento opcional se puede utilizar para especificar una posición inicial alternativa para la búsqueda. Se puede lograr un resultado similar reemplazando el asunto con substr())($subject, $offset).

La función preg_match() devuelve el número de coincidencias encontradas. Puede ser 0 (no se encontraron coincidencias) o 1, ya que preg_match() deja de funcionar después de encontrar la primera coincidencia. Si necesita encontrar o contar todas las coincidencias, debe utilizar la función preg_match_all(). La función preg_match() devuelve FALSO si se produce algún error durante la ejecución.

Recomendación: no utilice la función preg_match() si necesita comprobar la presencia de una subcadena en una cadena determinada. Utilice strpos() o strstr() para esto, ya que realizarán la tarea mucho más rápido.

Código de ejemplo Código de ejemplo Código de ejemplo Resultado del ejemplo:

el nombre de dominio es: sitio

preg_match_all

Función preg_match_all: realiza una búsqueda de patrón global en una cadena

preg_split

int preg_match_all (patrón de cadena, asunto de cadena, coincidencias de matriz [, banderas int [, desplazamiento int]])

Busca en el asunto de la cadena todas las coincidencias del patrón y coloca el resultado en la matriz de coincidencias en el orden determinado por la combinación de banderas.

Después de encontrar la primera coincidencia, las búsquedas posteriores no se realizarán desde el principio de la cadena, sino desde el final de la última aparición encontrada.

El parámetro de banderas opcional puede combinar los siguientes valores (tenga en cuenta que usar PREG_PATTERN_ORDER al mismo tiempo que PREG_SET_ORDER no tiene sentido):

PREG_PATTERN_ORDER
Si se establece este indicador, el resultado se ordenará de la siguiente manera: el elemento $matches contiene una matriz de apariciones completas del patrón, el elemento $matches contiene una matriz de apariciones del primer subpatrón, y así sucesivamente.

Código de ejemplo Resultado del ejemplo: ejemplo: , este es un ejemplo de prueba: , esto es una prueba

Como podemos ver, $out contiene una matriz de apariciones completas del patrón, y el elemento $out contiene una matriz de subcadenas contenidas en las etiquetas.

PREG_SET_ORDER
Si se establece este indicador, el resultado se ordenará de la siguiente manera: el elemento $matches contiene el primer conjunto de ocurrencias, el elemento $matches contiene el segundo conjunto de ocurrencias, y así sucesivamente.

Código de ejemplo Resultado del ejemplo: ejemplo: , ejemplo: esto es una prueba, esto es una prueba

En este caso, la matriz $matches contiene el primer conjunto de coincidencias, es decir: el elemento $matches contiene la primera aparición de todo el patrón, el elemento $matches contiene la primera aparición del primer subpatrón, y así sucesivamente. De manera similar, la matriz $matches contiene el segundo conjunto de coincidencias, y así sucesivamente para cada coincidencia encontrada.

PREG_OFFSET_CAPTURE
Si se especifica este indicador, para cada subcadena encontrada se indicará su posición en la cadena de origen. Es importante recordar que esta bandera cambia el formato de los datos devueltos: cada aparición se devuelve como una matriz, cuyo elemento cero contiene la subcadena encontrada y el primer elemento contiene el desplazamiento.

En caso de que no se utilice ningún indicador, el valor predeterminado es PREG_PATTERN_ORDER.

La búsqueda se realiza de izquierda a derecha, desde el inicio de la línea. El parámetro de desplazamiento opcional se puede utilizar para especificar una posición inicial alternativa para la búsqueda. Se puede lograr un resultado similar reemplazando el asunto con substr())($subject, $offset).

Devuelve el número de apariciones del patrón encontrado (puede ser cero) o FALSO si se produjo algún error durante la ejecución.

Código de ejemplo Código de ejemplo Resultado del ejemplo: coincidente: texto en negrita parte 1: parte 2: texto en negrita parte 3: coincidente: haz clic en mí parte 1: parte 2: haz clic en mí parte 3: preg_quote

Función preg_quote: escapa de caracteres en expresiones regulares

preg_split

cadena preg_quote (cadena cadena [, delimitador de cadena])

La función preg_quote() toma la cadena str y agrega una barra invertida antes de cada carácter especial. Esto puede resultar útil si la plantilla incluye variables de cadena, cuyo valor puede cambiar durante la operación del script.

Si se especifica el parámetro delimitador adicional, también se escapará. Esto es útil para escapar de un limitador que se utiliza en funciones PCRE. El delimitador más común es el carácter "/".

En las expresiones regulares, los siguientes caracteres se consideran caracteres de servicio: . \\ + * ? [ ^ ] $ () ( ) = !< > | :

Código de ejemplo Código de ejemplo Resultado del ejemplo: Este libro es *muy* difícil de encontrar. preg_replace

Función preg_replace: realiza búsqueda y reemplazo usando una expresión regular

preg_split

preg_replace mixto (patrón mixto, reemplazo mixto, asunto mixto [, límite int])

Busca en el asunto de la cadena coincidencias de patrón y las reemplaza con reemplazo. Si se especifica el parámetro de límite, se reemplazarán las ocurrencias de límite de la plantilla; si se omite el límite o es igual a -1, se reemplazarán todas las apariciones del patrón.

El reemplazo puede contener referencias del formato \\n o (desde PHP 4.0.4) $n, siendo preferible esta última. Cada una de estas referencias se reemplazará con una subcadena correspondiente al enésimo subpatrón entre paréntesis. n puede tomar valores de 0 a 99, y la referencia \\0 (o $0) corresponde a una aparición de todo el patrón. numerados de izquierda a derecha, comenzando con uno.

Cuando se utiliza el reemplazo de comodines utilizando referencias de subpatrones, puede surgir una situación en la que la máscara va seguida inmediatamente de un número. En este caso, una notación como \\n produce un error: una referencia al primer subpatrón seguido del número 1 se escribirá como \\11, que se interpretará como una referencia al undécimo subpatrón. Este malentendido se puede eliminar utilizando la construcción \$(1)1, que indica una referencia aislada al primer subpatrón seguido del dígito 1.

Código de ejemplo

El resultado de este ejemplo será:

Si se encuentra una coincidencia de patrón durante la ejecución de la función, se devolverá el valor del asunto modificado; de lo contrario, se devolverá el asunto original.

Los primeros tres parámetros de preg_replace() pueden ser matrices unidimensionales. En caso de que la matriz utilice claves, al procesar la matriz se tomarán en el orden en que se encuentran en la matriz. Especificar las claves en la matriz para el patrón y el reemplazo es opcional. Si decide usar índices para hacer coincidir los patrones y cadenas involucradas en el reemplazo, use la función ksort() en cada una de las matrices.

El oso negro saltó lentamente sobre el perro perezoso.

Usando ksort() obtenemos el resultado deseado:

El lento oso negro saltó sobre el perro perezoso.

Si el parámetro sujeto es una matriz, se realiza la búsqueda y reemplazo de patrones para cada uno de sus elementos. El resultado devuelto también será una matriz.

Si los parámetros de patrón y reemplazo son matrices, preg_replace() alternativamente recupera un par de elementos de ambas matrices y los usa para la operación de búsqueda y reemplazo. Si la matriz de reemplazo contiene más elementos que el patrón, se tomarán cadenas vacías para reemplazar los elementos faltantes. Si el patrón es una matriz y el reemplazo es una cadena, cada elemento de la matriz del patrón se buscará y reemplazará con el patrón (todos los elementos de la matriz serán el patrón a su vez, mientras que la cadena de reemplazo permanece fija). La opción cuando el patrón es una cadena y el reemplazo es una matriz no tiene sentido.

El modificador /e cambia el comportamiento de la función preg_replace() de tal manera que el parámetro de reemplazo, después de realizar las sustituciones necesarias, se interpreta como código PHP y solo entonces se usa para el reemplazo. Al utilizar este modificador, tenga cuidado: el parámetro de reemplazo debe contener código PHP válido; de lo contrario, se producirá un error de sintaxis en la línea que contiene la llamada a la función preg_replace().

Código de muestra: reemplazar por múltiples patrones

Este ejemplo generará:

$fechainicio = "27/05/1999";

Código de ejemplo: uso del modificador /e Código de ejemplo: convierte todas las etiquetas HTML a mayúsculas preg_replace_callback

Función preg_replace_callback: realiza búsqueda y reemplazo de expresiones regulares utilizando una función de devolución de llamada

preg_split

preg_replace_callback mixto (patrón mixto, devolución de llamada, asunto mixto [, límite int])

El comportamiento de esta función es en muchos aspectos similar a preg_replace(), excepto que en lugar del parámetro de reemplazo, debe especificar una función de devolución de llamada, a la que se le pasa una matriz de ocurrencias encontradas como parámetro de entrada. El resultado esperado es la cadena que será reemplazada.

Código de ejemplo (.*?).")", $xml, $matches, PREG_PATTERN_ORDER);

devolver $coincidencias; )

Busque etiquetas XHTML/XML con un valor de atributo específico

Esta función es muy similar a la anterior, excepto que puedes darle a la etiqueta el atributo deseado. Por ejemplo, puedes encontrar fácilmente.

Función get_tag($attr, $value, $xml, $tag=null) ( if(is_null($tag)) $tag = "\w+"; else $tag = preg_quote($tag); $attr = preg_quote($ attr); $valor = preg_quote($valor); $tag_regex = "/]*$attr\s*=\s* "(["\"])$valor\\2[^>]*>( .*?)/" preg_match_all($tag_regex, $xml, $matches, PREG_PATTERN_ORDER); return $matches; )

¡Otra herramienta útil para desarrolladores web! Le permite buscar/comprobar valores de color hexadecimales.

$cadena = "#555555"; if (preg_match("/^#(?:(?:(3))(1,2))$/i", $string)) ( echo "ejemplo 6 exitoso."; )

Buscar título del artículo

Este fragmento de código buscará y mostrará el texto dentro de las etiquetas en una página HTML.

$fp = fopen("http://www.catswhocode.com/blog","r"); while (!feof($fp))( $página .= fgets($fp, 4096); ) $titre = eregi("(.*)",$página,$regs); eco $regs; fclose($fp);

Analizando registros de Apache

La mayoría de los sitios se ejecutan en el conocido servidor web Apache. Si su sitio es uno de ellos, ¿por qué no utilizar PHP y expresiones regulares para analizar los registros de Apache?

//Registros: servidor web Apache //Accesos exitosos solo a archivos HTML. Útil para contar el número de páginas vistas. "^((?#IP del cliente o nombre de dominio)S+)s+((?#autenticación básica)S+s+S+)s+[((?#fecha y hora)[^]]+)]s+"(?: GET|POST|HEAD) ((?#archivo)/[^ ?]+?.html?)??((?#parámetros)[^ ?]+)? HTTP/+"s+(?#código de estado)200s+((?#bytes transferidos)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#agente de usuario )[^"]*)"$" //Registros: servidor web Apache //solo errores 404 "^((?#IP del cliente o nombre de dominio)S+)s+((?#autenticación básica)S+s+S+) s+[((?#fecha y hora)[^]]+)]s+"(?:GET|POST|HEAD) ((?#archivo)[^ ?"]+)??((?#parámetros)[ ^ ?"]+)? HTTP/+"s+(?#código de estado)404s+((?#bytes transferidos)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#agente de usuario )[^"]*)"$"

Reemplazo de comillas dobles con comillas tipográficas

Si eres un entusiasta de la tipografía, te encantará esta expresión regular que reemplaza las comillas dobles regulares con comillas tipográficas. En WordPress se utiliza una expresión regular similar en el contenido de la página.

Preg_replace("B"b([^"x84x93x94rn]+)b"B", "?1?", $texto);

Verificación integral de contraseña

Esta expresión regular garantizará que se ingresen al menos seis caracteres, números, guiones y guiones bajos en el campo de texto.

El campo de texto debe contener al menos un carácter en mayúscula, un carácter en minúscula y un número.

"A(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?) [-_a-zA-Z0-9](6,)z"

WordPress: uso de expresiones regulares para obtener imágenes de una publicación

Dado que muchos de ustedes son usuarios de WordPress, es posible que necesiten un código que les permita obtener todas las imágenes del texto de un artículo y mostrarlas.

Para usar este código, simplemente péguelo en cualquier archivo de su tema.