Header Ads Widget

Ticker

6/recent/ticker-posts

Aprender acerca de las expresiones regulares

 Aprender acerca de las expresiones regulares

Lo más probable es que se haya encontrado con expresiones regulares en algún momento durante el desarrollo de su software. Las expresiones regulares son una de esas cosas que tienden a hacer que las personas tomen partido y formen opiniones sólidas. Algunos juran por su uso, mientras que otros tienen un profundo desdén por ellos. De cualquier manera, son un mal necesario: necesitamos aprender sobre ellos para completar nuestras habilidades, por así decirlo. En este episodio, echaremos un vistazo rápido a algunos de los conceptos básicos para comenzar a utilizar expresiones regulares. También crearemos una aplicación PHP divertida de una página para probar expresiones regulares . Saltemos de inmediato.


Coincidencia de texto literal

El tipo más fácil de expresión regular es hacer coincidir cosas con caracteres literales. Por supuesto, dado que es el más fácil, también es el menos poderoso y útil. Sin embargo, nos pone en marcha con el funcionamiento de estas cosas, así que echemos un vistazo. Aquí está nuestra primera expresión regular:

/yaba daba/

Hay algunas cosas a tener en cuenta aquí. Primero, notará que al principio y al final del patrón hay barras diagonales. Estos son necesarios para indicar el principio y el final del patrón. Cuando tienes un patrón, necesitas un sujeto con el que coincidir. Creemos una oración de ejemplo de " No tengo idea de por qué elegí yaba daba en el patrón de expresión regular ". Nuestra expresión regular coincidirá con la cadena "yaba daba" en el tema, y ​​nada más. El patrón /Yaba Daba/no coincidiría en absoluto debido a la distinción entre mayúsculas y minúsculas.

Metacaracteres

En este punto es bueno mencionar los caracteres especiales en expresiones regulares. Aquí hay una tabla de ellos.

Metacarácter

Sentido

este es el carácter de escape usado para varias cosas
^se refiere al inicio de la cadena
PSse refiere al final de la cadena
.poderosa coincidencia con cualquier personaje excepto nuevas líneas
[comenzar una clase de personaje
]terminar una clase de personaje
|la tubería es para alternancia, básicamente un 'o'
(iniciar un grupo de captura
)finalizar un grupo de captura
?varios usos, principalmente con grupos de captura
*coincidir con cero o más
+coincidir con 1 o más
{comenzar una coincidencia de rango de números
}fin comienza una coincidencia de rango de números

Fantástico. Tenemos una pequeña descripción general de lo que hacen todos estos personajes. No temas, si no significan nada en este momento, tendrán más sentido a medida que avancemos.

Dado que estos caracteres anteriores tienen un significado especial, si está intentando hacer coincidirlos en una cadena, debe escapar del carácter en su expresión regular. Considere la cadena ¿Sabe a qué es igual 2 + 2? {pronto lo sabremos} [jaja] . Si aplicamos la expresión regular /2 + 2/, falla. Si lo intentamos /2 + 2/ahora funciona. Nuevamente, esto se debe a que el signo más es un carácter especial, por lo que debe escaparse con el carácter de barra invertida. ¿Qué pasa si necesitamos hacer coincidir ese texto entre las llaves? Podrías pensar eso /{[a-z ]*}/pero no es así, debemos escapar nuevamente de los caracteres especiales así /{[a-z ]*}/y ahora funciona.


Clases de caracteres en expresiones regulares

Esto hace un buen segway en clases de caracteres, de hecho, la última expresión regular que usamos contenía una clase de caracteres. Podemos comenzar revisando el ejemplo anterior para ver cómo funciona. De hecho, haremos uso de una increíble herramienta en línea en regexrLo que es realmente genial de regexr es que cuando pegas tu expresión regular, puedes pasar el cursor sobre cada carácter para ver su significado, que es realmente hábil. Examinemos el ejemplo anterior.

/{[a-z ]*}/

Dentro de este patrón hay una clase de carácter, es esta parte del patrón: [a-z ] al pasar el cursor sobre cada carácter en regexr podemos encontrar el significado. Entonces, en orden, [abre el conjunto de caracteres, a-zdice que coincida con cualquier carácter en minúscula del alfabeto, luego tenemos un carácter de espacio, luego ]cierra el conjunto de caracteres. Así es como se ve en regexr.

clase de caracteres de expresión regular

¡Resbaloso! Lo mejor que puede hacer es simplemente pegar varios temas y patrones y jugar para usted. Si necesitas todos los detalles sobre las clases de personajes, dirígete aquí .


Dígitos, caracteres de palabras y caracteres de espacios en blanco

Hay algunas clases de caracteres abreviados convenientes para dígitos, caracteres de palabras y espacios en blanco. Estos son manejados por dwsrespectivamente. Vea estos en acción fácilmente aquí.

clase de carácter de taquigrafía de dígitos de expresión regular
clase de caracteres de taquigrafía de palabras de expresión regular
espacio de expresión regular clase de carácter abreviado


Alternancia de expresión regular

Como siempre, a un concepto simple se le da un término elegante. A medida que su mente explota por la miríada de términos técnicos y acrónimos de trabajar en alta tecnología, la jerga de las expresiones regulares continúa transmitiendo esta idea con alternancia. ¿Qué es la alternancia? Elija esto o aquello. Hecho. Siguiente lección.

Un poco irónico, por supuesto, pero la idea es simple. Funciona de manera muy similar a la lógica que puede encontrar en una instrucción if al programar, donde dice si esta condición o esa condición, o esa condición, etc. Por ejemplo, continuando con la cadena de texto simple con la que hemos estado trabajando hasta ahora, aplicaremos un patrón que incluye alternancia. Aquí está el patrón /(to|we|ha)/y simplemente significa coincidir con o nosotros o ha en el tema. Regexr nos muestra este resultado.

alternancia de expresiones regulares

¡Increíble! Antes de regexr, uno tenía que hacer uso de algo como RegEx Buddy, que si bien es un gran software, no está en línea y no es gratuito. ¡Gracias http://gskinner.com/ por crear esta herramienta gratuita para que la usemos todos! Esto es lo que dice el manual de PHP sobre la alternancia.


El carácter de punto y el carácter de asterisco

La bazuca de facto de las expresiones regulares se presenta en forma de esta simple combinación. El punto seguido por el asterisco, o .* Mira lo sencilla que es esa pequeña combinación de dos caracteres. Solo un simple punto y asterisco. Lo que esto significa, sin embargo, es hacer coincidir cualquier cosa, cualquier número de veces. Se puede usar en ciertas situaciones, pero la mayoría de las enseñanzas aconsejarán usar esta combinación solo como último recurso. De hecho, si conectamos este patrón a regexr, nos da una advertencia infinita.

punto de expresión regular y asterisco

Por supuesto, como un buen pirata informático, este es el único patrón de expresión regular que uso al piratear en un entorno de juegos, pero en serio amigos, tengan cuidado con los peces gordos.


La codicia es buena

La codicia es buena, o eso dijo un chiflado en Wall Street hace muchas lunas. Hablando de Wall Street, ¿viste esa película con ese tipo del Titanic? Gran película, esos tipos estaban locos. Anyhoo ... En una expresión regular, tenemos este concepto de codicia. Lo que significa cuando algo es codicioso en el sentido de la expresión regular, es que intentará la coincidencia tantas veces como sea posible antes de que deje de hacerlo. Si hay algo que te puede hacer tropezar al trabajar con expresiones regulares, es definitivamente la codicia versus la pereza. ¿Cuándo es una ficha en particular codiciosa? ¿Cuándo es perezoso? ¿Cómo afecta esto al patrón que intento usar? Deberá tener en cuenta todas estas cosas al crear sus propios patrones. Más allá de la memorización de memoria, que tiene sus méritos, Por lo general, se trata de visitar una herramienta como regexr y simplemente probar los distintos cuantificadores para ver qué funciona. Veamos un ejemplo de codicia en acción. Usaremos este patrón/w/que se recuerda es un personaje de palabra y es codicioso. Este es el resultado de nuestra cadena de prueba, tenga en cuenta que coincide con cada carácter de palabra de la cadena.

expresión regular codicioso

¿Rechazar para qué?

¿Cómo podemos apagar esa codicia? Simplemente agregue el carácter de signo de interrogación como tal /w?/y vea el resultado.

expresión regular perezoso


Lookaheads y Lookbehinds

Hasta ahora solo hemos arañado la superficie de las expresiones regulares. Si eres nuevo en ellos, probablemente tu cabeza esté dando vueltas. Si ya está familiarizado con ellos, este episodio no es más que un repaso para usted. En cualquier caso, ahora podemos echar un vistazo a un favorito de expresiones regulares, la capacidad de mirar hacia adelante o hacia atrás de la coincidencia de patrones para determinar los delimitadores, por así decirlo, qué personajes capturaremos. Estos delimitadores son solo eso, no están incluidos en la coincidencia real. Veamos cómo funcionan estos tipos.

Lookahead positivo

En primer lugar, echaremos un vistazo a la anticipación positiva. Esto le dice al patrón que mire hacia adelante, o que busque un patrón específico en el patrón, y solo coincida si ese patrón secundario existe después del patrón principal. Suena extraño, así que veamos cómo funciona esto. Primero, busquemos cualquier secuencia de caracteres de 3 palabras como esta.

expresión regular sin mirar hacia adelante

Ok, bastante bien. Puede ver que encontramos cualquier secuencia de 3 caracteres seguidos y funciona bastante bien. Ahora, cambiémoslo. Busquemos tres caracteres * solo * si van seguidos de una llave como esta } . ¿Cómo podemos hacer tal cosa? Podemos hacerlo con una mirada anticipada positiva como esta.

expresión regular positiva mirar hacia adelante

¿Ves a ese socio? Muy bueno: se encuentra una coincidencia y el delimitador, o el carácter especificado de la búsqueda anticipada positiva, no está incluido en la coincidencia. ¡Esto es inmensamente útil! Una vez más, (? =) Es la sintaxis para una búsqueda anticipada positiva.

Mirada atrás positiva

Podemos hacer lo mismo para hacer coincidir patrones en casos en los que nos gustaría buscar * antes * el patrón principal para un fragmento de texto específico o un carácter específico. Esta es la mirada atrás positiva. Modificaremos nuestra expresión regular para que coincida con solo 2 caracteres de palabra en una fila * solo * si están precedidos por una llave como esta { . Esto se puede lograr con el patrón (?<={)[a-z]{2}que coincidirá ween la cadena . ¿Sabe a qué es igual 1 + 1? {pronto lo sabremos} [jaja] . Tenga en cuenta que (? <=) Es la sintaxis de la búsqueda hacia atrás positiva.

Lookahead negativo

Lo inverso de la mirada hacia delante y la mirada atrás positivas son las vistas hacia delante y hacia atrás negativas. Estos son exactamente lo contrario de los ejemplos anteriores. Básicamente, solo haga coincidir el patrón dado si * no * está seguido o precedido por un carácter o cadena determinados. Por ejemplo, si queremos encontrar todos los grupos de 3 caracteres * solo * si no van seguidos de una llave como esta } , podemos hacerlo.

anticipación negativa

Ah, sí. Mira eso. ¿No es ella algo bello? Todas esas buenas combinaciones de tres caracteres, pero espera, en ese aspecto a cabo justo antes de la llave de cierre. No está resaltado como coincidencia. Sí, es cierto, eso se debe a la anticipación negativa. Tenga en cuenta que la sintaxis de la búsqueda anticipada negativa es (?!) Donde lo que no desea hacer coincidir viene después del signo de exclamación.

Mirada atrás negativa

Al igual que tenemos una búsqueda hacia adelante negativa, tenemos una búsqueda hacia atrás negativa, y la sintaxis para esto es (? <!) Donde lo que no desea hacer coincidir viene después del signo de exclamación.


    Conclusión

    Las expresiones regulares son gente seca, al igual que el Mojave. De hecho, cuanto más extravagante es la escritura, más aburrido es el tema que se trata. Aproximadamente 1900 palabras, eso es casi todo lo que puedo reunir para las expresiones regulares hoy. Creo que cubrimos algunos buenos puntos de partida para las expresiones regulares en este episodio. Pueden estar un poco secos, pero son inmensamente poderosos, y cuando los necesite, puede que sean la única forma de resolver un problema difícil relacionado con una cadena o un personaje. ¡Vuelva a sintonizarnos cuando creemos nuestra propia aplicación de expresiones regulares en nuestro próximo episodio!

    Publicar un comentario

    0 Comentarios