Expresión regular php cuatro palabras detalladas. Expresiones regulares en PHP. Comprobando números de teléfono

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 en este ejemplo y hay 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 estaba compuesta correctamente. correo electrónico. 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, entendemos 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 en este caso 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 que está entre paréntesis se define como uno símbolo, en este caso el símbolo 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 la presencia mínimo un carácter y luego use "+" 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 cualquier registro 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 indicamos a la función con qué patrón debe coincidir. todo línea. 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 seguridad 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 en las que No números, y no aquellos en los que hay "¡¡¡Dios mío, cuántos símbolos 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? Hemos introducido el símbolo. ¡Pero! la mayúscula "^" ([^0-9]) colocada al principio indica que habrá no debería Espero que esto se haya solucionado

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. El escape se realiza agregando 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 inglesas, 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.

Respecto a la serie de artículos sobre el desarrollo de un blog cms, la primera parte de la serie ¡Lo declaro cerrado! En un futuro próximo comenzaremos a implementar el panel de administración, así que no "cambies". Si tienes alguna pregunta, estaré encantado de responderte. ¡Todo lo mejor para ti, eso es todo lo que tengo!

Las expresiones regulares son patrones especiales para buscar subcadenas en el texto. Con su ayuda, puedes resolver los siguientes problemas en una línea: "comprobar si una cadena contiene números", "buscar todo direcciones de correo electrónico", "reemplace varios signos de interrogación consecutivos por uno".

Comencemos con una sabiduría de programación popular:

Algunas personas, cuando se enfrentan a un problema, piensan: "Sí, soy inteligente, lo resolveré usando expresiones regulares". Ahora tienen dos problemas.

Ejemplos de plantillas

Empecemos con una pareja. ejemplos simples. La primera expresión en la imagen de abajo busca una secuencia de 3 letras, donde la primera letra es “k”, la segunda es cualquier carta rusa y el tercero es una "t" que no distingue entre mayúsculas y minúsculas (por ejemplo, "cat" o "CAT" se ajusta a este patrón). La segunda expresión busca en el texto la hora en el formato 12:34.

Cualquier expresión comienza con un carácter delimitador. El símbolo / se suele utilizar como tal, pero también se pueden utilizar otros símbolos que no tengan un propósito especial en las expresiones regulares, por ejemplo, ~, # o @. Se utilizan delimitadores alternativos si el carácter / puede aparecer en la expresión. Luego viene el patrón de la cadena que buscamos, seguido de un segundo delimitador, y al final puede haber una o más letras bandera. ellos preguntan opciones adicionales al buscar texto. A continuación se muestran ejemplos de banderas:

  • i - dice que la búsqueda no debe distinguir entre mayúsculas y minúsculas (distingue entre mayúsculas y minúsculas de forma predeterminada)
  • u - dice que la expresión y el texto por el cual la búsqueda está en marcha, use codificación utf-8, y no solo letras latinas. Sin él, es posible que la búsqueda de caracteres rusos (y otros caracteres no latinos) no funcione correctamente, por lo que siempre debes configurarlo.

La plantilla en sí consta de caracteres ordinarios y construcciones especiales. Bueno, por ejemplo, la letra "k" en las expresiones regulares significa ella misma, pero los símbolos significan "cualquier número del 0 al 5 puede estar en este lugar". Aquí lista completa personajes especiales(en el manual de PHP se les llama metacaracteres), y todos los demás caracteres en la secuencia regular son normales:

A continuación analizaremos el significado de cada uno de estos caracteres (y también explicaremos por qué la letra “е” se coloca por separado en la primera expresión), pero por ahora intentemos aplicar nuestras expresiones regulares al texto y ver qué sucede. hay en php función especial preg_match($regexp, $text, $match), que toma una expresión regular, texto y una matriz vacía como entrada. Comprueba si el texto contiene una subcadena que coincida con el patrón dado y devuelve 0 si no, o 1 si la hay. Y en la matriz pasada, la primera coincidencia encontrada con la secuencia regular se coloca en el elemento con índice 0. Escribamos un programa simple que aplique expresiones regulares a diferentes lineas:

Después de ver el ejemplo, estudiemos las expresiones regulares con más detalle.

Paréntesis en expresiones regulares

Repitamos lo que significan. diferentes tipos paréntesis:

  • Las llaves a(1,5) especifican el número de repeticiones del carácter anterior; en este ejemplo, la expresión busca de 1 a 5 letras consecutivas "a"
  • Los corchetes significan "cualquiera de estos caracteres", en este caso las letras a, b, c, x, y, z o un número del 0 al 5. Otros caracteres especiales como | no funcionan entre corchetes. o * - denotan un carácter regular. si en corchetes al principio hay un símbolo ^, luego el significado cambia al opuesto: “cualquier símbolo excepto los indicados”; por ejemplo, [^a-c] significa “uno cualquier personaje, excepto a, b o c."
  • Los paréntesis agrupan caracteres y expresiones. Por ejemplo, en la expresión abc+, el signo más solo se aplica a la letra c y la expresión busca palabras como abc, abcc, abccc. Y si pones entre paréntesis a(bc)+, entonces el cuantificador plus se refiere a la secuencia bc y la expresión busca las palabras abc, abcbc, abcbcbc.

Nota: puede especificar rangos de caracteres entre corchetes, pero recuerde que la letra rusa е está separada del alfabeto y para escribir “cualquier letra rusa” debe escribir [а-яе].

Barras de Bex

Si ha visto otros tutoriales sobre expresiones regulares, probablemente haya notado que la barra invertida se escribe de manera diferente en todas partes. En algún lugar escriben una barra invertida: \d , pero aquí en los ejemplos se repite 2 veces: \\d .

¿Por qué? El lenguaje de expresiones regulares requiere que escribas una barra invertida una vez. Sin embargo, en líneas en single y comillas dobles En PHP la barra invertida también tiene un significado especial: un manual sobre cadenas. e insertará solo el carácter $ en la cadena (y el motor de expresiones regulares no sabrá acerca de la barra invertida anterior). Para insertar la secuencia \$ en una cadena, debemos duplicar la barra invertida y escribir el código como $x = "\\$"; .

Por esta razón, en algunos casos (donde la secuencia de caracteres tiene un significado especial en PHP) se nos requiere duplicar la barra invertida:

  • Para escribir \$ en una expresión regular, escribimos "\\$" en el código
  • Para escribir \\ en una expresión regular, duplicamos cada barra invertida y escribimos "\\\\"
  • Para escribir una barra invertida y un número (\1) en formato normal, debe duplicar la barra invertida: "\\1"

En otros casos, una o dos barras invertidas darán el mismo resultado: "\\d" y "\d" insertarán un par de caracteres \d en la línea; en el primer caso, 2 barras invertidas son la secuencia para insertar una barra invertida , en el segundo caso no hay una secuencia especial y los caracteres se insertarán tal cual. Puede verificar qué caracteres se insertarán en una cadena y qué verá el motor de expresiones regulares usando echo: echo "\$"; . Sí, es difícil, pero ¿qué puedes hacer?

Diseños especiales en temporada regular.

  • \d busca un dígito cualquiera, \D - cualquier carácter excepto un dígito
  • \w coincide con cualquier letra (de cualquier alfabeto), número o guión bajo _ . \W coincide con cualquier carácter excepto una letra, un número o un guión bajo.

Además, existe una condición conveniente para indicar el límite de una palabra: \b .

Esta construcción significa que en un lado debe haber un carácter que sea una letra/número/guión bajo (\w), y en el otro lado debe haber un carácter que no lo sea. Bueno, por ejemplo, queremos encontrar la palabra "gato" en el texto. Si escribimos la expresión regular /cat/ui , encontrará la secuencia de estas letras en cualquier lugar, por ejemplo, dentro de la palabra "ganado". Claramente esto no es lo que queríamos. Si agregamos una condición de límite de palabra a la expresión regular: /\bcat\b/ui, ahora solo se buscará la palabra independiente "cat".

descripción detallada ) Les mostré un ejemplo del uso de expresiones regulares para encontrar ciertas piezas código fuente páginas. Ahora aprenderemos a escribirlos nosotros mismos. Esta habilidad le ayudará a escribir, borrar texto de fragmentos innecesarios, buscar las partes necesarias en grandes volúmenes

texto, etc. Este tema es bastante difícil, pero lo intentaré. forma corta iluminar más puntos importantes
. No sé si tendré éxito, pero espero que la lección sea útil.

  • preg_replace — busca y reemplaza texto que coincida con una expresión regular;
  • preg_match: solo una búsqueda normal;
  • preg_split: busca y divide texto.

Al menos, en lecciones anteriores los usamos. Más precisamente, en lugar de preg_match estaba preg_match_all, pero en esencia es lo mismo, sólo que este último no interrumpe la búsqueda después del primer hallazgo. Es decir, si usamos preg_match, no encontraremos todas las ocurrencias, sino solo la primera.

Elegir qué función utilizar en cada situación es bastante sencillo. Necesitamos reemplazar: usamos reemplazar, como en el caso en que necesitábamos eliminar partes innecesarias del código de la página, ¿recuerdas?

$página = preg_replace("/ ^]/i", "", $página); $página = preg_replace("/ ^]/i", "", $página); $página = str_replace("", "", $página);

El primer parámetro de la función es un carácter regular que determina lo que buscamos. El segundo es con qué lo reemplazamos. Tercero: ¿hacia dónde miramos? Por lo tanto, aquí tomamos la variable $page y le asignamos el resultado de la función preg_replace donde buscamos todos los tipos de entrada = casilla de verificación, así como las etiquetas de apertura y cierre. Los reemplazaron por ", es decir, simplemente los borraron. Espero que todo esté claro aquí. Pasaremos a analizar la expresión en sí (el primer parámetro de la función) un poco más adelante.
También hubo un ejemplo del uso de preg_match_all, que resultó útil para encontrar todos los enlaces en el texto restante. Necesitábamos enlaces entonces porque contenían palabras clave, que analizamos. Esto es lo que pasó:

Preg_match_all("/ ]+?>(.*?)<\/a>/uis",$página,$ok); para ($j=0; $j ".$ok[$j].""; }

El primer parámetro es nuevamente una expresión regular para encontrar todos los enlaces que están naturalmente encerrados en la etiqueta "a" (si no está familiarizado con el marcado HTML, lea). La segunda es una variable que contiene el texto que se buscará. El tercer parámetro es una variable en la que se coloca el resultado: $ok. Después de esto, todo lo que queda es revisar todos los elementos necesarios de $ok para obtener las capturas clave que necesitamos. Por otra parte, hay que decir que en la salida obtenemos una matriz multidimensional. Por eso lo mostramos de una manera tan compleja: $ok[$j]. Para ver la estructura de la matriz, use la función a continuación y comprenderá todo.

Print_r($ok);

Parece que hemos resuelto las funciones que utilizamos para nuestro trabajo. Ahora solo queda aprender a escribir estas mismas expresiones regulares, que son el primer parámetro de cada uno de estos métodos. Pasemos a lo más importante.

Cómo escribir oraciones regulares

Primero, veamos las estructuras básicas. Las expresiones tienen opciones. Se especifican con una letra y se escriben al final, precedidas de una barra.

Además, se admiten los siguientes metacaracteres:

Los metacaracteres, a su vez, pueden tener modificadores:

Bueno, ahora podemos pasar a analizar nuestros patrones habituales de la última lección. Basándonos en los signos anteriores, intentemos comprender lo que tenemos. Aquí está la expresión:

/^]/yo

La primera y la última barra “/” indican que hay una expresión regular dentro de ellas. Además, después del último ponemos “i”, esta es una opción, como en la primera tabla, no se tiene en cuenta el caso. Dentro de las barras se encuentra la secuencia regular en sí. Comienza con el signo menor que y la etiqueta de entrada, y todo lo que viene después hasta que el signo de punto es simplemente texto sin formato para buscar. Pero el punto en sí y los símbolos que lo siguen son más interesantes. En este caso, la construcción “.*?” significa cualquier secuencia de caracteres. Es decir, si combinamos solo texto y esta construcción, seleccionaremos todo el texto después de la primera aparición y hasta el final. Para detenerse, debe encontrar una etiqueta HTML de cierre "más que" o un carácter de nueva línea. Este diseño nos brinda esa oportunidad:

Los caracteres entre corchetes están conectados por un OR lógico. El final es el signo mayor que O el comienzo de la línea.
Esa es toda la expresión, en ella establecemos la condición inicial, la condición intermedia y la condición final. No es difícil, ¿verdad? Aquí hay una ilustración para mayor claridad:

Veamos una cosa más para solidificar todo. Buscamos enlaces con ellos:

/]+?>(.*?)<\/a>/uis

Leemos la expresión. Nuevamente, descartamos primero las barras y las opciones. Los indicadores "uis" se explican por sí mismos, excepto "u", que no describí; muestra que estamos usando codificación Unicode. No queda mucho. El inicio es la etiqueta "a", que se abre y luego viene la clase.

lo que significa NO mayor o menor que (abrir y cerrar etiquetas HTML), es decir, cualquier carácter en este caso. Se agrega “+?” a la clase, lo que significa que esta clase estará presente 1 o más veces (pero al menos 1 vez con seguridad). Y luego viene la etiqueta html de cierre para la etiqueta "a". Hay texto dentro del enlace especificado por el grupo.

Después de todo, no sabemos qué tipo de texto habrá, por eso definimos dicho grupo. Y al final hay una etiqueta de cierre “a”:

Tenga en cuenta que utilizamos una barra invertida para escapar de la barra para que se perciba como texto simple.

Uf. El tema es realmente bastante complejo, requiere práctica. Quizás estoy haciendo algo que no es del todo óptimo y es posible crear otras expresiones regulares más correctas, pero soy tan autodidacta como tú, así que no juzgues estrictamente, comparte tus opciones en los comentarios. Además, si algo no te queda claro, la página de comentarios y contacto están a tu servicio.

El uso más común de expresiones regulares en Perl es en operadores de búsqueda y reemplazo como s//, metro/, operadores conectivos =~ o != etc. Como regla general, todos estos operadores tienen opciones similares como:

Normalmente, todas estas opciones se indican como "/x". Incluso se pueden usar dentro de plantillas usando la nueva construcción (?...)

Las expresiones o patrones regulares son los mismos que los procedimientos de expresiones regulares en Unix. Las expresiones y la sintaxis están tomadas de los procedimientos V8 distribuidos gratuitamente por Henry Spencer, donde se describen en detalle.

Las plantillas utilizan los siguientes metacaracteres (caracteres que denotan grupos de otros caracteres) a menudo llamados estándar egrep:

Los metacaracteres tienen modificadores (escritos después del metacarácter):

En todos los demás casos, las llaves se consideran caracteres ordinarios (regulares). Por lo tanto, "*" es equivalente a (0,), "+" es (1,) y "?" - (0,1). n y m no pueden ser mayores que 65536.

De forma predeterminada, los metacaracteres son codiciosos. La coincidencia se propaga tantas veces como sea posible, sin considerar el efecto de los metacaracteres posteriores. Si desea "reducir su apetito", utilice el símbolo "?". Esto no cambia el significado de los metacaracteres, solo reduce la propagación. De este modo:

Los comodines funcionan de la misma manera que las comillas dobles, por lo que puedes usar caracteres `\` - (caracteres de barra invertida) en ellos:

\ t - carácter de tabulación
\norte - nueva línea
\r - traslado de carruaje
\A - traducción de formato
\v - tabulación vertical
\a - llamar
\mi - escapar
\033 - notación de símbolo octal
\x1A -hexadecimal
\do[ - símbolo de control
\l - siguiente carácter en minúscula
\u - mayúscula -//-
\L - todos los caracteres están en minúsculas hasta \E
\U - en la parte superior -//-
\MI - limitador de cambio de registro
\P - cancelar la acción como metacarácter

Además, se han agregado los siguientes metacaracteres a Perl:

Tenga en cuenta que todo esto es "un" carácter. Utilice modificadores para indicar secuencia. Entonces:

Además, existen metacaracteres imaginarios. Denota símbolos inexistentes en el lugar donde cambia el valor. Como:

Un límite de palabra (\b) es un punto imaginario entre los caracteres \w y \W. Dentro de una clase de carácter, "\b" representa el carácter de retroceso. Metacaracteres \A Y \Z- son similares a "^" y "$", pero si el comienzo de la línea "^" y el final de la línea "$" actúan para cada línea en una cadena multilínea, entonces \A Y \Z indicar el principio y el final de una cadena multilínea completa.

Si se utiliza agrupación (paréntesis) dentro del patrón, entonces el número de subcadena del grupo se designa como "\dígito". Tenga en cuenta que, siguiendo el patrón dentro de una expresión o bloque, estos grupos se indican como "$digit". Además, existen variables adicionales:

Ejemplo:

$s = "Uno 1 dos 2 y tres 3";

if ($s =~ /(\d+)\D+(\d+)/) ( print "$1\n"; # Resultado "1" print "$2\n"; # "2" print "$+\n" ; # "2" print "$&\n"; # "1 dos 2" print "$`\n" # "Uno " print "$"\n"; # " y tres 3" )

Ejemplo:

La versión 5 de Perl contiene construcciones de plantilla adicionales:

$s = "1+2-3*4"; if ($s =~ /(\d)(?=-)/) # Encuentra el número seguido de "-" ( print "$1\n"; # Resultado "2" ) else ( print "error de búsqueda\n" ; )

Ejemplo:

(?!patrón) - “mirando” hacia adelante por negación:

$s = "1+2-3*4"; if ($s =~ /(\d)(?!\+)/) # Encuentra un dígito que no esté seguido de "+" ( print "$1\n"; # Resultado "2" ) else ( print "buscar error\n"; )

(?ismx) - modificadores "internos". Es conveniente utilizarlo en plantillas donde, por ejemplo, es necesario especificar un modificador dentro de la plantilla. Normas expresión regular

  1. . (expresión regular)
  2. Cualquier personaje se representa a sí mismo a menos que sea un metacarácter. Si necesita cancelar el efecto de un metacarácter, coloque "\" delante de él.
  3. Cadena de caracteres indica una cadena de estos caracteres.
  4. El conjunto de caracteres posibles (clase) está encerrado entre corchetes "", esto significa que uno de los caracteres especificados entre paréntesis puede aparecer en este lugar. Si el primer carácter entre paréntesis es "^", ninguno de los caracteres especificados puede aparecer en este punto de la expresión. Dentro de una clase, puede utilizar el símbolo "-" para indicar una variedad de caracteres. Por ejemplo, a-z es una de las letras minúsculas del alfabeto latino, 0-9 es un número, etc.



Arriba