【问题标题】:How to write regex pattern in lucene?如何在 lucene 中编写正则表达式模式?
【发布时间】:2026-01-29 08:40:02
【问题描述】:

我想匹配 lucene 中正则表达式查询中的字符串。

测试字符串:

       program-id.  acinstal.

Java 中的正则表达式模式:

^[a-z0-9 ]{6}[^*]\s*(program-id)\.

我将如何专门为 lucene 正则表达式查询编写此正则表达式以匹配字符串。

【问题讨论】:

  • PROGRAM-ID|program-id 您可能希望使用不区分大小写的查询。不知道你会如何在 lucene 中做到这一点,但 Java 有 (?i) 选项。
  • @Thomas:感谢您的回答,但我需要 lucene 的特定正则表达式查询。

标签: java regex lucene


【解决方案1】:

您的正则表达式存在两个问题(根据之前的问题,假设您的测试字符串在没有任何标记化的情况下被编入索引。例如,StringField):

  1. 正则表达式必须匹配整个术语。没有任何分析,正如我们假设的那样,这意味着它必须匹配整个字段。在这种情况下,您需要添加一个.* 以匹配该字段的其余部分

  2. 由于无论如何都要匹配整个字段,所以不支持锚点,所以去掉开头的^

所以应该工作的正则表达式是:

[a-z0-9 ]{6}[^*]\s*(program-id)\..*

【讨论】:

  • 有什么方法可以在 lucene 中运行多个正则表达式,方法是使用 AND OR 运算符对它们进行分组。
  • @rocky - 是的,您可以将多个查询与BooleanQuery 结合起来。
  • [A-Z0-9 ]{6}[^*]\senvironment\s+division\.. 它不工作,你能告诉我有什么问题吗用这种模式??
  • 不支持\s 转义序列。 See the docs 了解 lucene 中可用的正则表达式语法。