29Jun

Cómo usar expresiones regulares básicas para buscar mejor y ahorrar tiempo

click fraud protection

Ya sea que haya estado buscando con Grep o mirando programas que pueden cambiar el nombre de los archivos por su cuenta, probablemente se haya preguntado si existía una manera más fácil de hacer su trabajo. Afortunadamente, las hay, y se llaman "expresiones regulares".

( Comic de XKCD.com)

¿Qué son las expresiones regulares?

Las expresiones regulares son declaraciones formateadas de una manera muy específica y que pueden representar muchos resultados diferentes. También conocido como "regex" o "regexp", se usan principalmente en funciones de búsqueda y nombres de archivos. Una expresión regular se puede usar como una fórmula para crear una cantidad de salidas posibles diferentes, todas las cuales se buscan. De forma alternativa, puede especificar cómo se debe nombrar un grupo de archivos especificando una expresión regular, y su software puede moverse gradualmente al siguiente resultado deseado. De esta forma, puede cambiar el nombre de múltiples archivos en varias carpetas de manera muy fácil y eficiente, y puede ir más allá de las limitaciones de un sistema de numeración simple.

instagram viewer

Debido a que el uso de expresiones regulares se basa en una sintaxis especial, su programa debe ser capaz de leerlas y analizarlas. Muchos programas de cambio de nombre de lote para Windows y OS X tienen soporte para expresiones regulares, así como la herramienta de búsqueda multiplataforma GREP( que abordamos en nuestro Bash Scripting para principiantes) y la herramienta de línea de comandos Awk para * Nix. Además, muchos administradores de archivos alternativos, iniciadores y herramientas de búsqueda los utilizan, y tienen un lugar muy importante en lenguajes de programación como Perl y Ruby. Otros entornos de desarrollo como. NET, Java y Python, así como el próximo C ++ 11, proporcionan bibliotecas estándar para usar expresiones regulares. Como se puede imaginar, pueden ser realmente útiles cuando se intenta minimizar la cantidad de código que pone en un programa.

Una nota sobre el escape de caracteres

Antes de mostrarle ejemplos, nos gustaría señalar algo. Vamos a usar el shell bash y el comando grep para mostrarle cómo aplicar expresiones regulares. El problema es que a veces queremos usar caracteres especiales que necesitan pasarse a grep, y el shell bash interpretará ese carácter porque el shell también lo usa. En estas circunstancias, necesitamos "escapar" de estos personajes. Esto puede ser confuso porque este "escape" de caracteres también ocurre dentro de las expresiones regulares. Por ejemplo, si queremos ingresar esto en grep:

\ & lt;

tendremos que reemplazar eso con:

\\\ & lt;

Cada personaje especial aquí recibe una barra invertida. Alternativamente, también puede usar comillas simples:

'\ & lt;'

Las comillas simples le dicen a bash que no interprete qué hay dentro de ellas. Si bien necesitamos que se tomen estos pasos para que podamos demostrarlo, sus programas( especialmente los basados ​​en GUI) a menudo no requerirán estos pasos adicionales. Para mantener las cosas simples y directas, la expresión regular real se le dará como texto entre comillas, y verá la sintaxis de escape en las capturas de pantalla de la línea de comandos.

¿Cómo se expanden?

Regexps es una forma muy concisa de establecer los términos para que su computadora pueda expandirlos en múltiples opciones. Echemos un vistazo al siguiente ejemplo:

tom [0123456789]

Los corchetes - [y] le dicen al motor de análisis que todo lo que hay adentro, cualquier carácter ONE se puede usar para que coincida. Lo que sea que esté dentro de esos paréntesis se llama conjunto de caracteres.

Entonces, si tuviéramos una gran lista de entradas y usáramos esta expresión regular para buscar, los siguientes términos serían equivalentes:

  • tom
  • tom0
  • tom1
  • tom2
  • tom3

y más. Sin embargo, la siguiente lista NO se correspondería, y NO aparecería en sus resultados:

  • tomato;la expresión regular no representa ninguna letra después de "tom"
  • Tom;¡la expresión regular distingue entre mayúsculas y minúsculas!

También puede elegir buscar con un punto( .) Que permita cualquier carácter presente, siempre que haya un carácter presente.

Como puede ver, el grepping con

. tom

no hizo aparecer los términos que solo tenían "tom" al principio. Incluso llegaron los "tomates verdes", porque el espacio anterior a "tom" cuenta como un personaje, pero los términos como "tomF" no tenían un carácter al principio y, por lo tanto, se ignoraron.

Nota: El comportamiento predeterminado de Grep es devolver una línea completa de texto cuando alguna parte coincide con su expresión regular. Otros programas pueden no hacer esto, y puedes desactivar esto en grep con el indicador '-o'.

También puede especificar la alternancia utilizando un conducto( |), como aquí:

speciali( s | z) e

Encontrará ambos:

  • especializar
  • especializar

Al usar el comando grep, necesitamos escapar de los caracteres especiales( ,|, y) con barras diagonales inversas, así como utilizar el indicador '-E' para que esto funcione y evitar errores desagradables.

Como mencionamos anteriormente, esto se debe a que necesitamos decirle al shell bash que pase estos caracteres a grep y que no hagan nada con ellos. La bandera '-E' le dice a grep que use los paréntesis y la tubería como caracteres especiales.

Puedes buscar por exclusión usando un símbolo de intercalación que está dentro de tus corchetes y al comienzo de un conjunto:

tom [^ F | 0-9]

Nuevamente, si estás usando grep y bash, recuerda escaparteese tubo!

Los términos que estaban en la lista pero que NO aparecieron son:

  • tom0
  • tom5
  • tom9
  • tomF

Estos no coinciden con nuestra expresión regular.

¿Cómo puedo utilizar entornos?

A menudo, buscamos según los límites. A veces solo queremos cadenas que aparecen al comienzo de una palabra, al final de una palabra o al final de una línea de código. Esto se puede hacer fácilmente usando lo que llamamos anclajes.

El uso de un símbolo de intercalación( fuera de los corchetes) le permite designar el "comienzo" de una línea.

^ tom

Para buscar el final de una línea, use el signo de dólar.

tom $

Puede ver que nuestra cadena de búsqueda viene ANTES del delimitador en este caso.

También puede buscar coincidencias que aparezcan al principio o al final de las palabras, no en líneas enteras.

\ & lt; tom

tom \ & gt;

Como mencionamos en la nota al principio de este artículo, necesitamos escapar de estos caracteres especiales porque estamos usando bash. Alternativamente, también puede usar comillas simples:

Los resultados son los mismos. Asegúrese de utilizar comillas simples, y no comillas dobles.

Otros recursos para Advanced Regexps

Solo hemos tocado la punta del iceberg aquí.También puede buscar términos de dinero delineados por el marcador de moneda y buscar cualquiera de los tres o más términos coincidentes. Las cosas pueden ponerse realmente complicadas. Si está interesado en aprender más sobre las expresiones regulares, entonces eche un vistazo a las siguientes fuentes.

  • Zytrax.com tiene algunas páginas con ejemplos específicos de por qué las cosas hacen y no coinciden.
  • Regular-Expressions.info también tiene una guía asesina para muchas de las cosas más avanzadas, así como una página de referencia útil.
  • Gnu.org tiene una página dedicada al uso de expresiones regulares con grep.

También puede crear y probar sus expresiones regulares usando una herramienta en línea gratuita basada en Flash llamada RegExr. Funciona a medida que escribe, es gratuito y se puede usar en la mayoría de los navegadores.

¿Tiene un uso favorito para expresiones regulares?¿Conoces un gran cambio de nombre de lote que los usa? Tal vez solo quieras presumir de tu grep-fu.¡Contribuya con sus pensamientos comentando!