C++ 合相范式正则表达式

c++ conjuntive normal form regex

本文关键字:正则表达式 范式 C++      更新时间:2023-10-16

我想建立一个正则表达式,说是一个表达式是合取范式(CNF(。

在以下情况下,表达式 E 位于 CNF 中:

  • 其所有子句的格式均为(V1 ∨ V2 ∨ ... ∨ Vn)
  • 在子句 Ci 之间,只有 &,即:E = C1 & C2 & ... & Ck
  • 变量 V1、V2、...只能{P, Q, R, S, ~P, ~Q, ~R, ~S}

示例:E = (P ∨ Q) & (Q ∨ R ∨ S) & (R ∨ Q)

我如何编写这样的正则表达式(没有空格(?


我想一定是这样的:

regex reg("[(~?[PQRS]{1}[v~?[PQRS]{1}]*)&]*(~?[PQRS]{1}[v~?[PQRS]{1}]*)");

但它给了我regex_error。

已解决。我错误地使用了()

答案是:

regex reg("(\(~?[PQRS](v~?[PQRS])*\)&)*\(~?[PQRS](v~?[PQRS])*\)");