我需要一个可以匹配错误的AND
/ OR
逻辑语句的正则表达式,但如果它们在引号中则不需要匹配,例如:
在以下位置找不到匹配项:
MAR AND SATURN
MAR OR SATURN
"MAR AND SATURN"
如果AND
或OR
两侧至少有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
答案 0 :(得分:0)
我认为这样做:
^ *'[^']*' *$|^ *"[^"]*" *$|(\b(AND|OR)\b) +(?1)|(?1)\s*$|^\s*(?1)
演示: https://regex101.com/r/nD9yR3/2
此正则表达式匹配错误的字符串!!!
(?1)
用于递归正则表达式。它重复了第1组的正则表达式。^ *'[^']*' *$|^ *"[^"]*" *$|
用于忽略引号内的字符串。如果它具有第1组的值而不是第0组,则认为它匹配。