Por que existem tantas variantes de expressão regular? [fechadas]

14

Hoje, quando revi o código-fonte do nosso projeto, descobri que havia muitos "espaços" e "guias" desnecessários localizados no final de cada linha. Então, eu decidi excluí-los com expressão regular.

No entanto, eu achei o comando sed -i '/\s+$/d'não funciona. Até eu mudar o comando para see -ri '/\s+$/d', ele agiu como minha expectativa. Do manual de sed, ele diz que -rinvoca regexp estendido.

Estou confuso, por que existem tantas variantes de expressões regulares? Como vim / emacs / perl / sed regexp. Por que o regexp não pode oferecer uma interface de usuário exclusiva?

hero2008
fonte

Respostas:

19

Por razões históricas. Não existe uma definição de sintaxe "Expressão regular". O próprio conceito de expressão regular não tem nada a ver com a sintaxe real que a descreve formalmente. As pessoas criaram diferentes maneiras de dizer a mesma coisa, portanto, diferentes estilos de sintaxe regex.

No entanto, você verá que existem basicamente dois grupos de definições atualmente:

  1. Expressões regulares POSIX que especificam Basic (BRE) e Extended Regular Expressions (ERE). A confusão começa onde, por exemplo, Expressões regulares básicas são usadas\( \)para denotar um grupo e Expressões regulares estendidas são usadas( )para isso.

  2. Expressões regulares baseadas em Perl . As expressões regulares Perl definem uma sintaxe mais consistente, onde, por exemplo, uma barra invertida sempre escapará de um caractere não alfanumérico. Atualmente, a sintaxe do perl regex é encontrada em muitas linguagens de programação populares, do Java ao Ruby.

Você pode conferir o artigo da Wikipedia sobre sintaxe regex para obter mais informações.

slhck
fonte