¿Por qué hay tantas variantes de expresión regular? [cerrado]

14

Hoy, cuando revisé el código fuente de nuestro proyecto, descubrí que hay muchos "espacios" y "pestañas" innecesarios ubicados al final de cada línea. Así que decidí eliminarlos con expresión regular.

Sin embargo, encontré que el comando sed -i '/\s+$/d'no funciona. Hasta que cambié el comando a see -ri '/\s+$/d', actuó como mi expectativa. Desde el manual de sed, dijo que -rinvoca expresiones regulares extendidas.

Estoy confundido, ¿por qué hay tantas variantes de expresiones regulares? Como vim / emacs / perl / sed regexp. ¿Por qué el regexp no puede ofrecer una interfaz de usuario única?

hero2008
fuente

Respuestas:

19

Por razones históricas. No hay una definición única de sintaxis de "Expresión regular". El concepto de una expresión regular en sí misma no tiene nada que ver con la sintaxis real que la describe formalmente. Las personas han ideado diferentes formas de decir lo mismo, por lo tanto, diferentes estilos de sintaxis de expresiones regulares.

Sin embargo, encontrará que actualmente hay dos grupos de definiciones en su mayoría:

  1. POSIX expresiones regulares que especifican Basic (BRE) y Extended Regular Expressions (ERE). La confusión comienza cuando, por ejemplo, las expresiones regulares básicas se usan\( \)para denotar un grupo y las expresiones regulares extendidas se usan( )para eso.

  2. Expresiones regulares basadas en Perl . Las expresiones regulares de Perl definen una sintaxis más consistente, donde, por ejemplo, una barra invertida siempre escapará a un carácter no alfanumérico. La sintaxis de expresiones regulares de Perl se encuentra en muchos lenguajes de programación populares en estos días, desde Java hasta Ruby.

Puede consultar el artículo de Wikipedia sobre sintaxis de expresiones regulares para obtener más información.

slhck
fuente