将正则表达式转换为简单的正则表达式

本文关键字:正则表达式 简单 转换 | 更新日期: 2023-09-27 17:53:07

我有这个表达式(a and b) or not (c and d)

我想把它转换成一个简单的a and b or not c and or not d

在Regex

中可能吗?

谢谢

将正则表达式转换为简单的正则表达式

我想你把数学表达式和正则表达式的概念混在一起了。这两件事毫无关系。正则表达式是搜索和替换字符串片段的工具。

看起来你正试图将De Morgan定律应用于布尔表达式,将"not (C and D)"更改为"not C or not D"。这不是文本操作本身,它是布尔代数,可以通过词法分析/解析技术更好地解决。

这是一个太大的主题,不能在一个Stack Overflow答案中总结,但是作为一个概述,我建议创建一个抽象语法树(AST)。第一个表达式的AST看起来像这样:

     or
   /    '
 and    not
 / '     |
a   b   and
        / '
       c   d

那么你可以通过应用布尔代数的规则来操作树的节点。例如,De Morgan定律"not (C and D) = not C or not D"与下面的子树变换相同:

 not               or
  |               /  '
 and     -->    not  not 
 / '             |    |
c   d            c    d