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

标签 regex

我想知道为什么必须有这么多正则表达式方言。为什么似乎有这么多语言,而不是重复使用一种久经考验的真实方言,似乎一心要编写自己的语言。

Like these.

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

我更多地指的是奇怪但微小的差异,例如括号必须在一种语言中转义,而在另一种语言中是文字。或者元字符的含义有些不同。

有什么特别的原因我们不能有某种通用的正则表达式方言吗?我认为对于必须使用多种语言工作的程序员来说,这会让事情变得更容易。

最佳答案

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

  • 串联
  • 工会|
  • Kleene 闭合 *

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

    其中一些扩展使“正则表达式”根本不再是正则的。由于这些附加功能,它们能够决定非正则语言,但无论如何我们仍然称它们为正则表达式。

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

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

    关于regex - 为什么有这么多不同的正则表达式方言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2298007/

    相关文章:

    用R删除字符串中的重复元素

    python - Pandas 正则表达式返回包含 U 或 UN 和数字的任何字符串

    javascript - 正则表达式在 Javascript 上允许空间

    c# - 正则表达式匹配字符串的所有实例

    JavaScript RegExp 没有给出期望的结果

    javascript - 简单的正则表达式问题

    java - Select 子句复杂正则表达式模式

    javascript - 如何在 JavaScript(和正则表达式?)中将字符串转换为连字符连接的单词?

    JavaScript 和正则表达式 : get the number of parenthesized subpattern

    regex - 从 r 中的字符串中提取时间