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).
- ¿Cuán realistas son las opiniones de Sam Altman sobre la inteligencia artificial sobrehumana como una amenaza?
- Cómo convertirse en un codificador de nivel de Microsoft y Google
- ¿Con qué frecuencia los desarrolladores tienen que tirar el trabajo realizado en sprints anteriores en un entorno ágil?
- Cómo mejorar la calidad del producto desde el punto de vista del control de calidad
- ¿Qué sucede si no cumple un plazo en un sprint?
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.