为什么有这么多正则表达式变体?

her*_*008 15 regex

今天,当我查看我们项目的源代码时,我发现每一行的末尾都有很多不必要的“空格”和“制表符”。所以我决定用正则表达式删除它们。

但是,我发现该命令sed -i '/\s+$/d'不起作用。直到我将命令更改为see -ri '/\s+$/d',它才如我所愿。从手册中sed,它说-r调用扩展的正则表达式。

我很困惑,为什么有这么多正则表达式变体?像 vim/emacs/perl/sed 正则表达式。为什么正则表达式不能提供独特的用户界面?

slh*_*hck 19

由于历史原因。“正则表达式”语法没有一个定义。正则表达式的概念本身与正式描述它的实际语法无关。人们想出了不同的表达方式,因此有不同风格的正则表达式语法。

但是,您会发现现在主要有两组定义:

  1. 指定基本 (BRE) 和扩展正则表达式 (ERE) 的POSIX 正则表达式。例如,混淆开始于,基本正则表达式用于\( \)表示一个组,而扩展正则表达式( )用于表示组。

  2. 基于 Perl 的正则表达式。Perl 正则表达式定义了更一致的语法,例如反斜杠将始终转义非字母数字字符。如今,从 Java 到 Ruby,在许多流行的编程语言中都可以找到 Perl 正则表达式语法。

您可以查看有关正则表达式语法维基百科文章以获取更多信息。