为什么会有这么多的正则表达式变体?[关闭]


14

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

但是,我发现该命令sed -i '/\s+$/d'不起作用。在将命令更改为之前see -ri '/\s+$/d',它一直是我的期望。从的手册中sed说,它-r调用扩展的regexp。

我很困惑,为什么有这么多的正则表达式变体?像vim / emacs / perl / sed regexp。为什么regexp无法提供唯一的用户界面?

Answers:


19

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

但是,您会发现这些天前后主要有两组定义:

  1. POSIX正则表达式,指定基本(BRE)和扩展正则表达式(ERE)。混乱开始于例如“基本正则表达式”用于\( \)表示组,而“扩展正则表达式”( )用于该组的地方。

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

您可以查看有关正则表达式语法Wikipedia文章以了解更多信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.