如何为 Lucene 8.2 编写 IP 地址正则表达式查询?
How to write an IP address regex query for Lucene 8.2?
我正在使用标准分析器和 RegexpQuery class,
当我显示 query.toString() 我得到
内容:/(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]| [1-9]?[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9 ]|[1-9]?[0-9])/
其中 content 是我的字段名称。
这与包含行 IP 地址:123.45.67.89
的文档不匹配
我的正则表达式有什么问题?还是我做错了什么?
编辑:如果我将查询更改为 content:/123.45.67.89/ 它匹配。
Edit2:我是否在转义“.”不正确?正则表达式试图匹配文字“.”,而不是通配符“.”的任何字符形式
您需要将非捕获组转换为捕获组,因为 Lucene regex engine 不支持前者:
content:/(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}/
请注意,我将 (<part>){3}(part)
语法替换为 (part)(<part>){3}
语法,因为这是正则表达式中的最佳做法,将量化子模式尽可能靠近右侧放置,这样可以减少回溯。
我正在使用标准分析器和 RegexpQuery class, 当我显示 query.toString() 我得到
内容:/(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]| [1-9]?[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9 ]|[1-9]?[0-9])/
其中 content 是我的字段名称。
这与包含行 IP 地址:123.45.67.89
的文档不匹配我的正则表达式有什么问题?还是我做错了什么?
编辑:如果我将查询更改为 content:/123.45.67.89/ 它匹配。
Edit2:我是否在转义“.”不正确?正则表达式试图匹配文字“.”,而不是通配符“.”的任何字符形式
您需要将非捕获组转换为捕获组,因为 Lucene regex engine 不支持前者:
content:/(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}/
请注意,我将 (<part>){3}(part)
语法替换为 (part)(<part>){3}
语法,因为这是正则表达式中的最佳做法,将量化子模式尽可能靠近右侧放置,这样可以减少回溯。