当我显示query.toString()时,我使用标准分析器和query.toString类
content:/(?:(?:250-5|20-4|10-9|1-90-9).){3}(?:250-5|20-4|10-9|1-90-9)/
content是我的字段的名称。
这与包含行IP地址的文档不匹配: 123.45.67.89
我的霸王龙怎么了?还是我做错了什么?
编辑:如果我将查询更改为content:/123.45.67.89/,它将匹配。
Edit2:我是不是在逃避'.‘不对?正则表达式试图匹配文字'.',而不是通配符任何字符形式的'.‘。
发布于 2019-10-01 14:19:58
您需要将非捕获组转换为捕获组,因为Lucene正则发动机不支持前者:
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}
语法,因为这是regex中的最佳实践,为了尽可能地将量化的子模式放置在右边,它减少了回溯。
https://stackoverflow.com/questions/58174902
复制相似问题