用于匹配不正确的 AND OR 逻辑的正则表达式
Regex for matching incorrect AND OR logic
我需要一个可以匹配不正确的 AND
/ OR
逻辑语句的正则表达式,但如果它们在引号中则不匹配,例如:
在以下位置找不到匹配项:
MAR AND SATURN
MAR OR SATURN
"MAR AND SATURN"
如果 AND
或 OR
两边至少有 1 个白色 space 字符加上 1 个非白色 space 字符并且这些字符不是由 OR
或 AND
组成的。因此,例如 ..R AND S.. 不应匹配,但 (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
或 OR
运算符之前、之后或两侧包含白色 space,这些也需要匹配。
我正在使用 .NET 框架,这是我想出的有效方法。不过,好像太复杂了!必须有一种方法来简化它。
(?!.*\"")(?<!(?:\bAND\b\s|\bOR\b\s))(?:\b(?:AND|OR)\b)(?=\s\b(?:AND|OR)\b)|(?<=\bAND\b\s|\bOR\b\s)(?:\b(?:AND|OR)\b)(?!\s\b(?:AND|OR)\b)|^\b(?:AND|OR)\b|(?:AND\s?|OR\s?)$|(?<=\()\s?(?:\bAND\b|\bOR\b)|(?<=\()(?:\bOR|\bAND)(?=\))|(?:\bOR|\bAND)(?=\))(?!.*\"")
我认为这样可以:
^ *'[^']*' *$|^ *"[^"]*" *$|(\b(AND|OR)\b) +(?1)|(?1)\s*$|^\s*(?1)
演示: https://regex101.com/r/nD9yR3/2
解释:
这个正则表达式是为了匹配错误的字符串!!!
(?1)
用于递归正则表达式。它重复第 1 组的正则表达式。
^ *'[^']*' *$|^ *"[^"]*" *$|
用于忽略引号内的字符串。如果它具有第 1 组而不是第 0 组的值,则认为它是匹配项。
我需要一个可以匹配不正确的 AND
/ OR
逻辑语句的正则表达式,但如果它们在引号中则不匹配,例如:
在以下位置找不到匹配项:
MAR AND SATURN
MAR OR SATURN
"MAR AND SATURN"
如果 AND
或 OR
两边至少有 1 个白色 space 字符加上 1 个非白色 space 字符并且这些字符不是由 OR
或 AND
组成的。因此,例如 ..R AND S.. 不应匹配,但 (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
或 OR
运算符之前、之后或两侧包含白色 space,这些也需要匹配。
我正在使用 .NET 框架,这是我想出的有效方法。不过,好像太复杂了!必须有一种方法来简化它。
(?!.*\"")(?<!(?:\bAND\b\s|\bOR\b\s))(?:\b(?:AND|OR)\b)(?=\s\b(?:AND|OR)\b)|(?<=\bAND\b\s|\bOR\b\s)(?:\b(?:AND|OR)\b)(?!\s\b(?:AND|OR)\b)|^\b(?:AND|OR)\b|(?:AND\s?|OR\s?)$|(?<=\()\s?(?:\bAND\b|\bOR\b)|(?<=\()(?:\bOR|\bAND)(?=\))|(?:\bOR|\bAND)(?=\))(?!.*\"")
我认为这样可以:
^ *'[^']*' *$|^ *"[^"]*" *$|(\b(AND|OR)\b) +(?1)|(?1)\s*$|^\s*(?1)
演示: https://regex101.com/r/nD9yR3/2
解释:
这个正则表达式是为了匹配错误的字符串!!!
(?1)
用于递归正则表达式。它重复第 1 组的正则表达式。^ *'[^']*' *$|^ *"[^"]*" *$|
用于忽略引号内的字符串。如果它具有第 1 组而不是第 0 组的值,则认为它是匹配项。