You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为自定义搜索引擎编写匹配AND/OR/NOT的正则表达式求助

解决方案:匹配布尔搜索表达式的正则

针对你自定义搜索引擎的正则需求,下面是能匹配所有合法示例、排除非法输入的正则方案:

正确的正则表达式

val pattern = Pattern.compile("^(NOT\\s+)?'(?!(AND|OR|NOT)$)(?!.*\\b(AND|OR|NOT)\\b)[^']*'(?:\\s+(AND|OR)\\s+(NOT\\s+)?'(?!(AND|OR|NOT)$)(?!.*\\b(AND|OR|NOT)\\b)[^']*')*$")

正则各部分解释

  • ^ 和 $:锚定字符串首尾,确保整个输入完全匹配,避免部分匹配的情况。
  • (NOT\\s+)?:匹配可选的NOT前缀,要求NOT后至少跟一个空格。
  • '(?!(AND|OR|NOT)$)(?!.*\\b(AND|OR|NOT)\\b)[^']*':匹配合法的带引号值:
    • (?!(AND|OR|NOT)$):排除引号内仅为AND/OR/NOT的情况。
    • (?!.*\\b(AND|OR|NOT)\\b):排除引号内包含完整AND/OR/NOT单词的情况(比如'testANDtest')。
    • [^']*:匹配引号内除单引号外的任意字符。
  • (?:\\s+(AND|OR)\\s+(NOT\\s+)?'(?!(AND|OR|NOT)$)(?!.*\\b(AND|OR|NOT)\\b)[^']*')*:匹配重复的连接项:
    • \\s+(AND|OR)\\s+:匹配AND/OR操作符,要求前后至少有一个空格。
    • 后续重复可选的NOT前缀+合法带引号值的结构,支持多个连接项。

验证说明

该正则可完全匹配你提供的examples列表中所有合法情况,同时排除examplesNotMatched中的所有非法输入:

  • 支持单个带引号值(如'value')、带NOT前缀的单个值(如NOT 'value')。
  • 支持通过AND/OR连接的多值组合(如'value' AND NOT 'value1'、'value' OR 'value1' AND NOT 'value2')。
  • 自动排除无引号值、直接以AND/OR开头的输入、缺少操作符的多值组合、引号内包含关键词的情况等。

内容的提问来源于stack exchange,提问作者J.Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 09:55:26