Как написать запрос регулярного выражения IP-адреса для Lucene 8.2? - PullRequest
1 голос
/ 30 сентября 2019

Я использую стандартный анализатор и класс RegexpQuery, когда я отображаю query.toString (), я получаю

content: / (? :( ?: 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: я избегаю''неправильно? Регулярное выражение пытается соответствовать буквальному символу «.», А не подстановочному символу любой символьной формы «.»

1 Ответ

0 голосов
/ 01 октября 2019

Вам необходимо преобразовать группы без захвата в группы захвата, потому что Механизм регулярного выражения 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}синтаксис, так как это наилучшая практика в регулярных выражениях: размещать квантифицированные субпаттерны как можно ближе к правому краю, это сокращает обратный ход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...