Realmente no entiendo las expresiones regulares. ¿Me las puede explicar de una manera fácil de seguir? Si hay herramientas o libros en línea, ¿podría vincularlos también?
La parte más importante son los conceptos. Una vez que comprenda cómo funcionan los bloques de construcción, las diferencias en la sintaxis equivalen a poco más que dialectos suaves. Una capa sobre la sintaxis de su motor de expresiones regulares es la sintaxis del lenguaje de programación que está utilizando. Los lenguajes como Perl eliminan la mayor parte de esta complicación, pero tendrá que tener en cuenta otras consideraciones si utiliza expresiones regulares en un programa C.
Si piensa en las expresiones regulares como bloques de construcción que puede mezclar y combinar a su gusto, le ayudará a aprender a escribir y depurar sus propios patrones, pero también a comprender los patrones escritos por otros.
Conceptualmente, las expresiones regulares más simples son caracteres literales. El patrón N
coincide con el carácter 'N'.
Las expresiones regulares una junto a la otra coinciden con las secuencias. Por ejemplo, el patrón Nick
coincide con la secuencia 'N' seguida de 'i' seguida de 'c' seguida de 'k'.
Si alguna vez ha usado grep
en Unix, aunque solo sea para buscar cadenas de aspecto ordinario, ¡ya ha estado usando expresiones regulares! (La re
en se grep
refiere a expresiones regulares).
Agregando solo un poco de complejidad, puede hacer coincidir 'Nick' o 'nick' con el patrón [Nn]ick
. La parte entre corchetes es una clase de caracteres , lo que significa que coincide exactamente con uno de los caracteres incluidos. También puede usar rangos en clases de caracteres, por lo que [a-c]
coincide con 'a', 'b' o 'c'.
El patrón .
es especial: en lugar de coincidir solo con un punto literal, coincide con cualquier carácter † . Es lo mismo conceptualmente que la clase de personajes realmente grande [-.?+%$A-Za-z0-9...]
.
Piense en las clases de personajes como menús: elija solo uno.
El uso .
puede ahorrarle mucho escribir y existen otros atajos para patrones comunes. Digamos que desea hacer coincidir un dígito: es una forma de escribir [0-9]
. Los dígitos son un objetivo de coincidencia frecuente, por lo que podría utilizar el acceso directo \d
. Otros son \s
(espacios en blanco) y \w
(caracteres de palabra: alfanuméricos o subrayado).
Las variantes en mayúsculas son sus complementos, por lo que \S
coincide con cualquier carácter que no sea un espacio en blanco, por ejemplo.
A partir de ahí, puede repetir partes de su patrón con cuantificadores . Por ejemplo, el patrón ab?c
coincide con 'abc' o 'ac' porque el ?
cuantificador hace que el subpatrón que modifica sea opcional. Otros cuantificadores son
*
(cero o más veces)+
(una o más veces){n}
(exactamente n veces){n,}
(al menos n veces){n,m}
(al menos n veces pero no más de m veces)Al juntar algunos de estos bloques, el patrón [Nn]*ick
coincide con todos los
El primer partido demuestra una lección importante: ¡ *
siempre tiene éxito! Cualquier patrón puede coincidir cero veces.
Algunos otros ejemplos útiles:
[0-9]+
(y su equivalente \d+
) coincide con cualquier número entero no negativo\d{4}-\d{2}-\d{2}
coincide con fechas formateadas como 2019-01-01Un cuantificador modifica el patrón a su izquierda inmediata. Es de esperar 0abc+0
que coincida con '0abc0', '0abcabc0', etc., pero el patrón inmediatamente a la izquierda del cuantificador positivo es c
. Esto significa que 0abc+0
coincide con '0abc0', '0abcc0', '0abccc0', etc.
Para hacer coincidir una o más secuencias de 'abc' con ceros en los extremos, use 0(abc)+0
. Los paréntesis denotan un subpatrón que se puede cuantificar como una unidad. También es común que los motores de expresiones regulares guarden o "capturen" la parte del texto de entrada que coincide con un grupo entre paréntesis. Extraer bits de esta manera es mucho más flexible y menos propenso a errores que contar índices y substr
.
Anteriormente, vimos una forma de hacer coincidir 'Nick' o 'nick'. Otro es con alternancia como en Nick|nick
. Recuerde que la alternancia incluye todo a su izquierda y todo a su derecha. Utilizar agrupación paréntesis, a limitar el alcance de |
, por ejemplo , (Nick|nick)
.
Para otro ejemplo, podría escribir de manera equivalente [a-c]
como a|b|c
, pero es probable que esto sea subóptimo porque muchas implementaciones asumen que las alternativas tendrán longitudes mayores que 1.
Aunque algunos personajes coinciden con ellos mismos, otros tienen significados especiales. El patrón \d+
no coincide con la barra invertida seguida de una D minúscula seguida de un signo más: para obtener eso, usaríamos \\d\+
. Una barra invertida elimina el significado especial del siguiente carácter.
Los cuantificadores de expresión regular son codiciosos. Esto significa que coinciden con la mayor cantidad de texto posible y, al mismo tiempo, permiten que todo el patrón coincida correctamente.
Por ejemplo, digamos que la entrada es
"Hola", dijo ella, "¿Cómo estás?"
Puede esperar ".+"
que coincida solo con "Hola" y luego se sorprenderá cuando vea que coincide con "Hola" hasta "¿usted?".
Para cambiar de codicioso a lo que podría considerar cauteloso, agregue un extra ?
al cuantificador. Ahora comprende cómo funciona \((.+?)\)
el ejemplo de su pregunta. Coincide con la secuencia de un paréntesis izquierdo literal, seguido de uno o más caracteres y terminado con un paréntesis derecho.
Si su entrada es '(123) (456)', entonces la primera captura será '123'. Los cuantificadores no codiciosos quieren permitir que el resto del patrón comience a coincidir lo antes posible.
(En cuanto a su confusión, no conozco ningún dialecto de expresión regular en el que ((.+?))
se haga lo mismo. Sospecho que algo se perdió en la transmisión en algún punto del camino).
Utilice el patrón especial ^
para que coincida solo al principio de su entrada y $
para que coincida solo al final. Hacer "sujetalibros" con tus patrones en los que dices: "Sé lo que hay en la parte delantera y trasera, pero dame todo lo que hay entre ambos" es una técnica útil.
Di que quieres hacer coincidir los comentarios del formulario.
-- This is a comment --
escribirías ^--\s+(.+)\s+--$
.
Las expresiones regulares son recursivas, por lo que ahora que comprende estas reglas básicas, puede combinarlas como desee.
†: La afirmación anterior que .
coincide con cualquier carácter es una simplificación con fines pedagógicos que no es estrictamente cierta. El punto coincide con cualquier carácter excepto la nueva línea, "\n"
pero en la práctica rara vez se espera que un patrón .+
cruce un límite de nueva línea. Las expresiones regulares de Perl tienen un /s
interruptor y Java Pattern.DOTALL
, por ejemplo, para hacer .
coincidir cualquier carácter. Para los idiomas que no tienen esta característica, puede usar algo como [\s\S]
para hacer coincidir "cualquier espacio en blanco o cualquier espacio que no sea en blanco", en otras palabras, cualquier cosa.
La estrella de HGTV, Christina Hall, revela que le diagnosticaron envenenamiento por mercurio y plomo, probablemente debido a su trabajo como manipuladora de casas.
Recientemente salió a la luz un informe policial que acusa a la estrella de 'Love Is Blind', Brennon, de violencia doméstica. Ahora, Brennon ha respondido a los reclamos.
Conozca cómo Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia mientras organizaba la primera celebración de Acción de Gracias desde que murió su madre, Naomi Judd.
Descubra por qué un destacado experto en lenguaje corporal cree que es fácil trazar "tales paralelismos" entre la princesa Kate Middleton y la princesa Diana.
Los inodoros arrojan columnas de aerosol invisibles con cada descarga. ¿Como sabemos? La prueba fue capturada por láseres de alta potencia.
Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?
The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!
¿Sigue siendo efectivo ese lote de repelente de insectos que te quedó del verano pasado? Si es así, ¿por cuánto tiempo?
Anteriormente, Kotaku informó que un hotel Godzilla se estaba abriendo en Tokio este abril. Junto al hotel, estaba programada la aparición de una enorme cabeza de 'Zilla, pero todo lo que hemos visto fueron imágenes conceptuales computarizadas.
Foto: Getty Desde que lanzó The Boring Company hace un año, Elon Musk ha mencionado varios sitios de construcción posibles para el negocio de perforación de túneles y ha descartado una vaga referencia a una aprobación gubernamental "verbal" para un túnel Hyperloop que conecta la ciudad de Nueva York y Washington. , CC. Pero ahora sabemos que al menos un alcalde quiere que Musk perfore un agujero debajo de su ciudad.
Tapas elásticas de silicona de Tomorrow's Kitchen, paquete de 12 | $14 | Amazonas | Código promocional 20OFFKINJALids son básicamente los calcetines de la cocina; siempre perdiéndose, dejando contenedores huérfanos que nunca podrán volver a cerrarse. Pero, ¿y si sus tapas pudieran estirarse y adaptarse a todos los recipientes, ollas, sartenes e incluso frutas en rodajas grandes que sobran? Nunca más tendrás que preocuparte por perder esa tapa tan específica.
Hemos pirateado algunas ciudades industriales en esta columna, como Los Ángeles y Las Vegas. Ahora es el momento de una ciudad militar-industrial-compleja.
El equipo está a la espera de las medallas que ganó en los Juegos Olímpicos de Invierno de 2022 en Beijing, ya que se está resolviendo un caso de dopaje que involucra a la patinadora artística rusa Kamila Valieva.
Miles de compradores de Amazon recomiendan la funda de almohada de seda Mulberry, y está a la venta en este momento. La funda de almohada de seda viene en varios colores y ayuda a mantener el cabello suave y la piel clara. Compre las fundas de almohada de seda mientras tienen hasta un 46 por ciento de descuento en Amazon
El jueves se presentó una denuncia de delito menor amenazante agravado contra Joe Mixon.
El Departamento de Policía de Lafayette comenzó a investigar a un profesor de la Universidad de Purdue en diciembre después de recibir varias denuncias de un "hombre sospechoso que se acercaba a una mujer".
Al igual que el mundo que nos rodea, el lenguaje siempre está cambiando. Mientras que en eras anteriores los cambios en el idioma ocurrían durante años o incluso décadas, ahora pueden ocurrir en cuestión de días o incluso horas.
Estoy de vuelta por primera vez en seis años. No puedo decirte cuánto tiempo he estado esperando esto.
“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.
Creo, un poco tarde en la vida, en dar oportunidades a la gente. Generosamente.