1

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

4

2 回答 2

2

没有这样的正则表达式。布尔表达式可以具有任意级别的嵌套括号,这使得它们成为一种非常规语言。

于 2012-06-09T22:18:57.640 回答
0

我使用 python 使用一些独立的规则来实现它,例如:

  • 检查表达式是否没有'and'后跟'or',也没有'or'后跟'and'

  • 开括号 '(' 后面必须跟除 'and'、'or' 以外的其他内容;并且必须跟在 'and' 或 'or' 之后(除非在开头计算)

  • 右括号 ')' 必须跟在 'and' 或 'or' 或字符串结尾字符 '$' 之后,并且必须跟在 'or','and' 以外的其他内容之后

  • ......

这是一个使用 python 的示例(但假设我们使用 PCRE 正则表达式来支持可变宽度后视):

    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
于 2017-11-16T21:58:35.503 回答