首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么正则表达式引擎不支持所有的set操作?

为什么正则表达式引擎不支持所有的set操作?
EN

Stack Overflow用户
提问于 2021-09-30 15:43:04
回答 1查看 82关注 0票数 0

类似于私人论坛上的这个问题:为什么RegEx实现不支持交叉和互补?

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

有趣的是,连接、联合和星型操作在正则表达式实现中无处不在。为什么正则表达式引擎通常不支持其他集合操作--交、补和差?

一个示例FA演示了两个FA substring 01odd number of 1s这些讲稿的交集。

引文:

斯科特·阿伦森。6.045J自动机、可计算性和复杂性。2011年春季。麻省理工学院:麻省理工学院,OpenCourseWare,https://ocw.mit.edu。许可证:创意共享-NC-SA。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-01 09:33:06

支持查找器的Regex引擎允许您实现交叉、补充和差异:

  • (?=pattern1)pattern2将匹配pattern1和pattern2都匹配的字符串。
  • (?!pattern).*将匹配模式不匹配的任何内容(尽管更现实地说,您可以使用pattern作为正则表达式,并让更高级别的环境逆转匹配结果)
  • (?!pattern1)pattern2将匹配由pattern2匹配的字符串,而不是pattern1匹配的字符串。

然而,在正则表达式的历史上,查找是一个比较新的特性,并且仍然不被许多正则表达式引擎所支持。为什么会这样呢?

我不太熟悉regex的历史,但如果我粗略地看一下维基百科的文章,它们来自数学家斯蒂芬·科尔·克莱恩( Stephen Cole Kleene )的“正规语文的定义”,它只基于并、级联和克莱恩星运算,这或许可以解释为什么这些是正则表达式中的基本运算。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69395190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档