Página principal » cómo » Cómo usar expresiones regulares básicas para buscar mejor y ahorrar tiempo

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

    Si ha estado buscando con Grep o mirando programas que pueden renombrar los archivos por usted, probablemente se haya preguntado si había una manera más fácil de hacer su trabajo. Afortunadamente, hay, y se llama "expresiones regulares".

    (Comic desde 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 conocidos como "expresiones regulares" o "expresiones regulares", se utilizan principalmente en las funciones de búsqueda y nombres de archivos. Una expresión regular se puede utilizar como una fórmula para crear una serie de resultados posibles diferentes, todos los cuales se buscan. Alternativamente, puede especificar cómo se debe nombrar a un grupo de archivos especificando una expresión regular, y su software puede moverse de manera incremental a la siguiente salida prevista. De esta manera, puede cambiar el nombre de múltiples archivos en múltiples carpetas de manera muy fácil y eficiente, y puede ir más allá de las limitaciones de un sistema de numeración simple.

    Debido a que el uso de expresiones regulares se basa en una sintaxis especial, su programa debe ser capaz de leerlos y analizarlos. Muchos programas de cambio de nombre de archivos por lotes para Windows y OS X tienen soporte para expresiones regulares, así como la herramienta de búsqueda multiplataforma GREP (que mencionamos en nuestra Guía de Bash Scripting para principiantes) y la herramienta de línea de comandos Awk para * Nix. Además, muchos administradores de archivos, lanzadores y herramientas de búsqueda alternativos los utilizan, y tienen un lugar muy importante en los 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 el uso de expresiones regulares. Como puedes imaginar, pueden ser realmente útiles cuando intentas minimizar la cantidad de código que pones en un programa.

    Una nota sobre los personajes que escapan

    Antes de mostrarte ejemplos, nos gustaría señalar algo. Vamos a utilizar 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 deben pasarse a grep, y el shell bash interpretará ese carácter porque el shell también lo usa. En estas circunstancias, necesitamos "escapar" a estos personajes. Esto puede ser confuso porque este "escape" de caracteres también ocurre dentro de las expresiones regulares. Por ejemplo, si queremos introducir esto en grep:

    \<

    tendremos que reemplazarlo con:

    \\\<

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

    '\<'

    Las comillas simples le dicen a bash que NO interprete lo que hay dentro de ellas. Si bien requerimos 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, se le dará la expresión regular real como texto citado, y verá la sintaxis de escape en las capturas de pantalla de la línea de comandos..

    ¿Cómo se expanden??

    Las expresiones regulares son una forma muy concisa de expresar 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, independientemente de lo que haya dentro, se puede usar cualquier carácter de UN para coincidir. Cualquier cosa que esté dentro de esos paréntesis se llama un conjunto de caracteres..

    Por lo tanto, si tuviéramos una gran lista de entradas y usáramos esta expresión regular para buscar, los siguientes términos coincidirían:

    • tom
    • tom0
    • tom1
    • tom2
    • tom3

    y así. Sin embargo, la siguiente lista NO coincidirá y, por lo tanto, NO aparecerá en sus resultados:

    • tomate ; la expresión regular no tiene en cuenta ninguna letra después de "tom"
    • Tom la expresión regular distingue entre mayúsculas y minúsculas!

    También puede optar por buscar con un punto (.) Que permita la presencia de cualquier carácter, siempre que haya un carácter presente..

    Como puedes ver, grepping con

    .tom

    No mencionó los términos que solo tenían "tom" al principio. Incluso los "tomates verdes" entraron, porque el espacio antes de "tom" cuenta como un personaje, pero los términos como "tomF" no tenían un carácter al principio y, por lo tanto, fueron ignorados..

    Nota: el comportamiento predeterminado de Grep es devolver una línea completa de texto cuando alguna parte coincide con su expresión regular. Es posible que otros programas no lo hagan, y puedes desactivarlo en grep con la marca '-o'.

    También puede especificar la alternancia usando una tubería (|), como aquí:

    speciali (s | z) e

    Esto encontrará tanto:

    • especializarse
    • especializarse

    Cuando usamos el comando grep, debemos escapar de los caracteres especiales (, | y) con barras invertidas, así como utilizar el indicador '-E' para que esto funcione y evitar errores desagradables.

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

    Puede buscar por exclusión utilizando un cursor que se encuentra dentro de los corchetes y al comienzo de un conjunto:

    tom [^ F | 0-9]

    Nuevamente, si estás usando grep y bash, recuerda escapar de esa tubería.!

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

    • tom0
    • tom5
    • tom9
    • tomF

    Estos no coinciden con nuestra expresión regular.

    ¿Cómo puedo utilizar los ambientes??

    A menudo, buscamos en base a los límites. A veces solo queremos cadenas que aparecen al principio 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 anclas.

    El uso de un cursor (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 ANTES del ancla en este caso.

    También puede hacer coincidencias que aparecen al principio o al final de las palabras, no a líneas completas..

    \

    tom \>

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

    Los resultados son los mismos. Asegúrate de usar comillas simples, y no comillas dobles.

    Otros recursos para expresiones avanzadas

    Aquí solo hemos golpeado la punta del iceberg. También puede buscar términos monetarios delineados por el marcador de moneda y buscar cualquiera de tres o más términos coincidentes. Las cosas pueden complicarse mucho. Si está interesado en aprender más acerca de las expresiones regulares, consulte las siguientes fuentes.

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

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


    ¿Tienes un uso favorito para las expresiones regulares? ¿Sabes de un gran renombrador de lotes que los utiliza? Tal vez solo quieras presumir de tu grep-fu. Contribuye tus pensamientos comentando!