我想在公式列表中搜索有效的布尔公式,例如A'+ BC(D + E)。有关正则表达式的任何帮助吗?
答案 0 :(得分:2)
没有这样的正则表达式。布尔表达式可以具有任意级别的嵌套括号,这使得它们成为非常规语言。
答案 1 :(得分:0)
我使用python使用一些独立的规则实现它,例如:
检查表达式是否有'和'其次是'或',也不是'或'然后是'和'
打开括号'('必须跟不上'和','或';之后必须跟随'和'或'或'(在开头计算时除外)
右括号')'必须遵循'和'或者'或'或字符串结束字符' $'并且必须遵循'或','和'以外的其他内容。
.....
这是一个使用python的例子(但假设我们使用PCRE regexp来支持可变宽度的后视):
tmp= query
tmp= re.sub("[(]", " (", query)
tmp= re.sub(" +", " ", query)
if re.search(r"\(( *and| *or| *\))", tmp) or re.search(r"(?<!\band|\bor) \(", tmp):
return False
if re.search(r"\)(?!( *or\b| *and\b|$))", tmp) or re.search(r"(\band *|\bor *)\)", tmp):
return False
if re.search(r"(\band|\bor)( and\b| or\b)", tmp) or re.search(r"(?<!\band|\bor) (?!and\b|or\b)", tmp):
return False
return True