类似于私人论坛上的这个问题:为什么RegEx实现不支持交叉和互补?
由正则表达式构建的有限自动机在集合运算--并、交、补和差下是封闭的。这些FA是关闭的两个额外的操作级联和克莱恩星。
有趣的是,连接、联合和星型操作在正则表达式实现中无处不在。为什么正则表达式引擎通常不支持其他集合操作--交、补和差?
一个示例FA演示了两个FA substring 01和odd number of 1s与这些讲稿的交集。

引文:
斯科特·阿伦森。6.045J自动机、可计算性和复杂性。2011年春季。麻省理工学院:麻省理工学院,OpenCourseWare,https://ocw.mit.edu。许可证:创意共享-NC-SA。
发布于 2021-10-01 09:33:06
支持查找器的Regex引擎允许您实现交叉、补充和差异:
(?=pattern1)pattern2将匹配pattern1和pattern2都匹配的字符串。(?!pattern).*将匹配模式不匹配的任何内容(尽管更现实地说,您可以使用pattern作为正则表达式,并让更高级别的环境逆转匹配结果)(?!pattern1)pattern2将匹配由pattern2匹配的字符串,而不是pattern1匹配的字符串。然而,在正则表达式的历史上,查找是一个比较新的特性,并且仍然不被许多正则表达式引擎所支持。为什么会这样呢?
我不太熟悉regex的历史,但如果我粗略地看一下维基百科的文章,它们来自数学家斯蒂芬·科尔·克莱恩( Stephen Cole Kleene )的“正规语文的定义”,它只基于并、级联和克莱恩星运算,这或许可以解释为什么这些是正则表达式中的基本运算。
https://stackoverflow.com/questions/69395190
复制相似问题