miércoles, 22 de junio de 2016

POSIX básico vs. Expresiones regulares extendidas

Justo cuando pensábamos que no podía ser más confuso, descubrimos que POSIX también divide las expresiones regulares en dos tipos: expresiones regulares básicas (BRE - Basic regular expressions) y expresiones regulares extendidas (ERE - extended regular expressions). Las características que hemos visto hasta ahora son soportadas por cualquier aplicación que sea compatible con POSIX e implemente BRE. Nuestro programa grep es uno de esos programas.

¿Cuál es la diferencia entre BRE y ERE? Es un asunto de metacaracteres. Con BRE, se reconocen los siguientes metacaracteres:

^ $ . [ ] *

Todos los demás caracteres se consideran literales. Con ERE, se añaden los siguientes metacaracteres (y sus funciones asociadas):

( ) { } ? + |

Sin embargo (y esta es la parte divertida), los caracteres "(", ")", "{" y "}" se tratan como metacaracteres en BRE si son escapados con una barra invertida, mientras que con ERE, preceder cualquier metacaracter con una barra invertida hace que sea tratado como un literal. Cualquier rareza que se presente será tratada en los temas siguientes.

Como las características que vamos a ver a continuación son parte de ERE, vamos a necesitar un grep diferente. Tradicionalmente, se ha utilizado el programa egrep, pero la versión GNU de grep también soporta expresiones regulares extendidas cuando se usa la opción -E.

No hay comentarios:

Publicar un comentario