有效布尔表达式的正则表达式

时间:2012-06-09 22:17:33

标签: regex boolean expression formula

我想在公式列表中搜索有效的布尔公式,例如A'+ BC(D + E)。有关正则表达式的任何帮助吗?

2 个答案:

答案 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