用于匹配错误的AND OR逻辑的正则表达式

时间:2016-05-02 09:41:13

标签: regex booleanquery

我需要一个可以匹配错误的AND / OR逻辑语句的正则表达式,但如果它们在引号中则不需要匹配,例如:

在以下位置找不到匹配项:

MAR AND SATURN
MAR OR SATURN
"MAR AND SATURN"

如果ANDOR两侧至少有1个空白字符加1个非空白字符且字符不是由{{1}组成,则不会有任何匹配}或OR。因此,例如..R AND S ..不应匹配,但AND(OR) OR (OR)应该匹配。

匹配

(AND) AND (AND)

您会注意到一些示例包含 MARS AND SATURN [AND] MARS [OR] MARS [ OR ] [AND] AND [AND] [OR] [AND] [OR] [AND] [AND] [OR] [ AND ] [ OR ] AND运算符之前,之后或两侧的空格,这些也需要匹配。

我正在使用.NET框架,这就是我提出的工作原理。但是,它似乎太复杂了!必须有一种方法来简化它。

OR

1 个答案:

答案 0 :(得分:0)

我认为这样做:

^ *'[^']*' *$|^ *"[^"]*" *$|(\b(AND|OR)\b) +(?1)|(?1)\s*$|^\s*(?1)

演示: https://regex101.com/r/nD9yR3/2

说明:

此正则表达式匹配错误的字符串!!!

  1. (?1)用于递归正则表达式。它重复了第1组的正则表达式。
  2. ^ *'[^']*' *$|^ *"[^"]*" *$|用于忽略引号内的字符串。如果它具有第1组的值而不是第0组,则认为它匹配。