问题 为什么有这么多不同的正则表达式方言?


我想知道为什么必须有这么多正则表达方言。为什么它看起来像这么多语言,而不是重复使用一种经过验真的方言,似乎一心想写自己的语言。

像这些。

我的意思是,我知道其中一些确实有非常不同的后端。但是不应该从程序员那里抽象出来吗?

我更多地指的是奇怪但小的差异,比如括号必须用一种语言转义,但是在另一种语言中是文字。或者元字符意味着有些不同的东西。

是否有任何特殊原因我们不能为正则表达式提供某种普遍方言?我认为这对于必须使用多种语言的程序员来说会更容易。


3291
2018-02-19 16:44


起源

我不知道,也许每个方言的开发者都认为他们的方法比其他方言更好,或者它可能适合其他人尚未支持的特定需求,然后当其他人决定实施他们认为可以做的那些功能时它更好。这并不像是一个中央正则表达委员会。 - FrustratedWithFormsDesigner
这不是Posix应该是什么:-)? - BigBeagle
stackoverflow.com/a/11857890/874188 如果那就是你所追求的,那就有一点历史背景。 - tripleee


答案:


因为正则表达式只有三个操作:

  • 级联
  • 联盟 |
  • Kleene关闭 *

其他一切都是延伸或语法糖,因此没有标准化的来源。捕获组,反向引用,字符类,基数操作等等都是正则表达式原始定义的补充。

其中一些扩展使“正则表达式”不再具有规律性。由于这些额外内容,他们能够决定非常规语言,但无论如何我们仍称它们为正则表达式。

随着人们添加更多扩展,他们通常会尝试使用正则表达式的其他常见变体。这就是几乎所有方言都使用的原因 X+ 意为“一个或多个X”,它本身只是写作的捷径 XX*

但是当添加新功能时,没有标准化的基础,所以有人必须做出一些改进。如果不止一组设计师在同一时间提出类似的想法,他们会有不同的方言。


9





出于同样的原因,我们有这么多语言。有些人会尝试改进他们的工具,同时其他人会抵制变革。 C / C ++ / Java / C#有人吗?


3





编程的“我做得更好”产生了所有这些东西。它与标准相同。人们试图制定下一个“最佳”标准来取代所有其他标准,它只是成为我们所有人必须学习/设计的东西。


1





我认为很重要的一个问题是谁将负责设置和维护标准语法并确保在不同环境中的兼容性?

此外,如果正则表达式本身必须在解释器/编译器中使用它自己关于字符串操作的独特规则进行解析,那么这可能导致需要对转义和文字做不同的处理。

一个好的策略是花时间了解正则表达式算法本身如何在更抽象的层次上运行,然后实现任何特定语法变得更加容易。类似于每种编程语言如何拥有自己的语法来构造条件语句和循环,但仍然完成相同的抽象任务。


1