c++ - 时间:2019-05-10 标签:c++conjuntive normal form regex
问题描述
我想构建一个正则表达式来表示表达式是合取范式(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])*\\)");
推荐阅读
- bash - 编辑(sed)文件中出现字符串的特定行
- vb.net - BackGroundWorker 不显示百分比 (Visual Basic)
- c# - C# 确保分配给学生的科目可以有一个或多个结果
- helidon - 更改 Helidon 中的默认日志记录实现
- c# - MSSQL Linux Server 问题:SQL Server 仅支持 SAFE 程序集
- ios - obj-c 中动态 ALTER sqlite3_bind_text 语句的语法错误
- php - 使用 .htaccess 文件拒绝访问特定 url
- java - 如何仅使用数组和循环(没有其他方法)来删除空值?
- c++ - 从字符串输入中删除特定单词
- python - 无法识别文本选择属性