为什么正则表达式引擎不支持所有集合操作?

Why don't regular expression engines support all set operations?

类似于私人论坛上的这个问题:Why don’t RegEx implementations support intersection and complement?

由正则表达式构建的有限自动机在集合运算并集、交集、补集和差集下是封闭的。这些 FA 在两个额外的操作连接和 Kleene 星下关闭。

有趣的是,串联、并集和星号运算在正则表达式实现中无处不在。为什么正则表达式引擎通常不支持其他集合运算交集、补集和差集?

示例 FA 展示了 these lecture notes.

中两个 FA substring 01odd number of 1s 的交集

引用:

Scott Aaronson. 6.045J Automata, Computability, and Complexity. Spring 2011. Massachusetts Institute of Technology: MIT OpenCourseWare, https://ocw.mit.edu. License: Creative Commons BY-NC-SA.

支持环视的正则表达式引擎让您可以实现交集、补集和差集:

  • (?=pattern1)pattern2 将匹配 pattern1 和 pattern2 都匹配的字符串
  • (?!pattern).* 将匹配任何与模式不匹配的内容(尽管更实际的做法是将 pattern 用作正则表达式并让更高级别的环境反转匹配结果)
  • (?!pattern1)pattern2 将匹配 pattern2 匹配但不匹配 pattern1
  • 的字符串

然而,lookarounds 是正则表达式历史上一个相当新的功能,许多正则表达式引擎仍然不支持它。这是为什么?
我不太了解正则表达式的历史,但如果我相信粗略浏览维基百科文章,它们源自数学家 Stephen Cole Kleene 的 definition of regular languages,它仅基于联合、连接和 Kleene 星操作,这可能解释为什么这些是正则表达式中的基本操作。