¿Cuál es una breve explicación de la sintaxis de RegEx?

Puede ser más fácil si comienzas con ejemplos simples.

Supongamos que tiene un documento largo que contiene números de teléfono aquí y allá y desea elegirlos todos independientemente de su posición.

¿Cómo se vería un número de teléfono? Utilizo ejemplos de EE. UU. (Y espero que sean correctos, además de que esto no será exhaustivo).

En EE. UU., Un número se parece a XXXYYYYYYY, donde XXX es un código de área de tres números y AAAAAAA un número de teléfono local de siete números.

Por lo tanto, le gustaría buscar cualquier cadena de diez caracteres de longitud que sean todos dígitos. Con una expresión regular simplemente podrías decir
\d\d\d\d\d\d\d\d\d\d
O si eres vago
\d+
Que coincide con cualquier cadena de longitud que tenga uno o más números secuenciales. O ser perezoso e inteligente y decir
\d{10}
para que coincida con una cadena de exactamente diez números.

Pero espera. Existen varios problemas, algunos que quizás ya haya detectado. ¿Qué pasa si hay un espacio entre el código de área y el número de teléfono local? Podrías simplemente decir
\d{3} \d{7}
para atraparlos. ¿Pero y si no hay? Podrías simplemente decir
\d{3} *\d{7}
Porque * significa que debe haber cero o más de los caracteres anteriores. También podría haber puesto {0,1} si desea hacer coincidir exactamente 0 o 1 espacios.

Pero, ¿y si es un guión en lugar de un espacio? Aún así, esto es fácil de combinar:
\d{3}[ \-]{0,1}\d{7}
Los corchetes denotan una lista de caracteres con los cuales cualquiera puede coincidir. Por ejemplo, si desea hacer coincidir cualquier letra entre A y H, podría decir [a-hA-H] (el guión debe escaparse porque se usa para indicar una lista (ah indicaría todas las letras entre a a h, inclusivo).

Y ahora ya tiene toneladas de funciones para crear sus propias expresiones regulares si solo agregamos una más: agrupación. ¿Qué sucede si el número también puede incluir “+1” para llamadas internacionales (código de salida y código de país)? Sobre la base de nuestro ejemplo anterior, podríamos decir
(\+1){0,1} \d{3}[ \-]{0,1}\d{7}

Aquí agregamos un grupo que consiste en un signo más (escapado porque tiene un significado especial) y el número 1 (código de país de EE. UU.) Y los agrupamos y dijimos que puede haber cero o una de estas cadenas, un espacio y el número que estamos buscando. (En realidad, la coincidencia de cadenas ahora cambió, por lo que el número real debe tener un espacio antes de coincidir).

Por supuesto, todavía hay varias cosas para hacer que esto coincida con todas las variaciones posibles, pero esta es la (una de) fuerza de los patrones de expresión regular: son realmente simples de construir y modificar. Si busca algo y se da cuenta de que algo no es atrapado por su patrón o que hay demasiado atrapado, simplemente refine el patrón. Contraste con hacer lo mismo sin patrones regexp. En un lenguaje imperativo, es posible que deba reescribir toda la función de coincidencia.

¿Y qué haces con estos patrones? Simplemente puede imprimirlos todos o puede solucionar un error recurrente (como agregar el prefijo del código de país a todos los números) o puede verificar que existan los mismos números en algún otro documento. Si piensa fuera de este ejemplo, se da cuenta de que casi cada vez que necesita buscar, modificar o manejar cualquier documento que esté en formato de texto (“texto” como opuesto al binario, regexp son excelentes para manejar código, csv, etc. archivos también) regexp son una gran herramienta.

Un buen lugar para jugar con expresiones regulares es Regex Tester.

Para obtener más información sobre los patrones de expresión regular, consulte, por ejemplo, Inicio rápido de expresiones regulares. Obviamente, hay muchas cosas que dejé fuera, pero para un uso simple no necesitas mucho más. Casi todo el resto que necesita durante mucho tiempo está en esa página (anclas, puntos, alternancia). No se preocupe por las referencias y la búsqueda todavía.

EDITAR: No estaba claro sobre el inicio rápido. Toqué brevemente las clases de personajes sin nombrarlos. También están en esa página y son útiles si no son obligatorios.

La sintaxis para la expresión regular varía según el idioma, pero la mayor parte está bastante estandarizada. Hay toneladas de tutoriales en la web, así que lo vincularé a Regular-Expressions.info – Tutorial de Regex, Ejemplos y Referencia – Patrones de Regexp, que es un recurso bastante bueno.

Una de sus páginas, Aprenda a usar expresiones regulares, puede ser específicamente lo que desea.

También puede estar interesado en el Inicio rápido de expresiones regulares.

editar Como ha agregado lo siguiente, debo aclarar:

Los enlaces de lecturas adicionales son bienvenidos, pero ¿estoy buscando alguna explicación que pueda hacerme decir “gotcha!”

Como ya ha mencionado que conoce el CS teórico, que es la parte más difícil, no veo qué hay realmente para “obtener”. El “clic” o “gotcha” reside en comprender los conceptos detrás de la expresión regular, no en la sintaxis, y parece que ya los comprende.

Para “obtener” la sintaxis, debe leer un buen tutorial, mejor que uno que yo pueda escribir, por eso no escribí uno, y practicar.

More Interesting

¿Cuál es el mejor lenguaje para el desarrollo de software, Python o C ++?

¿Cuáles son las cosas que realmente le gustan y las mejores prácticas en herramientas específicas de gestión de información y software de productividad?

¿Cuándo se anunciarán los resultados de VIT M.Tech Integrated (Software Engineering) 2016?

¿Las redes de computadoras son un área aburrida? Si observa las preguntas de las redes de computadoras en Quora, son escasas y no son emocionantes en comparación con otros campos.

¿Tomar un curso de informática es una mala idea en mi caso?

¿Un solo equipo de desarrolladores atrae código que no se puede escalar ni mantener?

¿Cuándo reescribe una aplicación desde cero?

¿Cuáles son algunos ejemplos de simulaciones por computadora que modelan el mundo real?

¿Cuál es la mejor herramienta de gestión de proyectos de software para el desarrollo impulsado por el comportamiento?

¿Cuáles son algunos malos olores en la programación?

¿Qué es el desarrollo ágil?

¿Qué tan grande fue una hazaña de ingeniería de Linux cuando se lanzó por primera vez en 1991?

¿Cómo puede un estudiante universitario de ingeniería informática prepararse para convertirse en un ingeniero de software integrado?

¿Cuál es el futuro de una carrera de pruebas de software? ¿Qué tecnologías y dominios serán beneficiosos para un probador manual y qué otros cursos necesita aprender?

¿Cuál es el consejo de Adam D'Angelo para ingenieros de software principiantes?