求助:编写匹配含括号逻辑短语的正则表达式
正则表达式解决方案
支持括号(含嵌套)的正则表达式(PCRE引擎)
^(?:\((?1)\)|(?:NOT )?'[^']+')(?:(?: AND | OR )(?:\((?1)\)|(?:NOT )?'[^']+'))*$
仅支持单层括号的版本(兼容JavaScript等无递归支持的引擎)
^(?:\((?:(?:NOT )?'[^']+'(?:(?: AND | OR )(?:NOT )?'[^']+')*)\)|(?:NOT )?'[^']+')(?:(?: AND | OR )(?:\((?:(?:NOT )?'[^']+'(?:(?: AND | OR )(?:NOT )?'[^']+')*)\)|(?:NOT )?'[^']+'))*$
规则解释
- 边界控制:
^和$确保整个字符串完全匹配,避免部分符合的片段被误判。 - 核心匹配单元:
(?:NOT )?'[^']+':匹配带可选NOT前缀的引号值,要求引号内至少包含一个非引号字符,避免空引号的无效格式。\((?1)\):递归引用整个核心规则,处理括号包裹的任意合法逻辑短语,支持多层嵌套括号,仅PCRE类引擎支持;单层版本则直接在括号内重复基础逻辑规则,适配无递归能力的引擎。
- 逻辑连接规则:
(?: AND | OR )严格匹配大写的逻辑运算符,连接后续的核心单元(括号组或带NOT的引号值),可重复多次实现多条件组合。
匹配验证
- 允许的短语:所有你列出的带/不带括号的案例都能正常匹配,例如:
('foo' AND 'bar') OR ('baz' AND 'que')(NOT 'foo' OR 'bar')'value' AND NOT 'value1'
- 不允许的短语:不符合规则的案例会被自动排除,例如:
- 无引号的
value:不满足引号包裹的基础要求 - 无运算符连接的
'value' 'value2':缺少AND/OR连接符,不符合逻辑结构 - 引号未闭合的
('foo OR 'bar'):引号内的内容匹配失败 - 开头直接是运算符的
AND value:不符合核心单元的起始规则
- 无引号的
内容的提问来源于stack exchange,提问作者J.Doe
相关产品推荐
相关产品推荐

