regex - 正则表达式的否定

标签 regex computation-theory

我不确定它怎么称呼:否定、互补或倒置。这个概念是这样的。例如有字母“ab”

R = 'a'
!R = the regexp that matche everyhting exept what R matches

在这个简单的例子中它应该是这样的

!R = 'b*|[ab][ab]+'

如何调用这样的正则表达式?我从我的研究中记得有一种方法可以计算它,但它很复杂并且通常很难手工制作。是否有一个很好的在线工具(或常规软件)可以做到这一点?

最佳答案

jbo5112的回答给出了很好的实际帮助。但是,在理论上:正则表达式对应于正则语言,因此您要查找的术语是互补的。

补充正则表达式:

  1. 转换成等价的 NFA。这是 well-known and defined process.
  2. 通过 powerset construction 将 NFA 转换为 DFA
  3. 通过使接受状态变为不接受来补充 DFA,反之亦然。
  4. Convert the DFA到正则表达式。

您现在有了原始正则表达式的补集!

关于regex - 正则表达式的否定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12349710/

相关文章:

r - 将基于模式匹配的参数传递给 R 中的函数

JavaScript 正则表达式表情符号

java - 如何执行随机算法

regex - 简化正则表达式,[star] 神秘消失

intersection - 如何获得DFA交集?

compiler-construction - 解释器、部分评估器和编译器的理论

algorithm - 为 { 0 ^ (3 ^ n) | 构建枚举器(打印机)| n >=0} 最多有 10 个状态,包括打印和暂停,有限的字母表?

regex - 将 VLOOKUP 的结果加入 Google 表格中的一个字符串

python - 正则表达式中的分组和 OR

javascript - 关联数组 : define the undefined?