Простой способ преобразовать regex в Java совместимый regex?

Мне определили regex в Python/Ruby/PHP, который похож на это

"(forumdisplay.php\?.*page=%CURRENTPAGE%)"

Когда я делаю это для Java, я должен удвоить Escape тот вопросительный знак до \\?

Как так:

"(forumdisplay.php\\?.*page=%CURRENTPAGE%)";

Существует ли функция, которую я могу использовать, чтобы сделать это автоматически? Или я должен был бы переключить весь свой regexes для работы с Java regex механизма?

11
задан nhahtdh 15 January 2014 в 20:33
поделиться

3 ответа

Хорошим началом обычно является простое "найти заменить все" "\" на "\\\".

На самом деле, вы не делаете изменений, чтобы заставить это работать с java regex engine. Вам просто приходится иметь дело с мучениями, связанными с хранением regex в строке Java... Вы могли бы сделать это в функции, но это привело бы к увеличению объема кода для поддержки. Я бы предложил сделать find replace, как описано выше...

0
ответ дан 3 December 2019 в 07:36
поделиться

Обратите внимание, что это не механизм регулярных выражений Java, для которого требуется двойная обратная косая черта, а компилятор Java . Когда вы пишете в исходном коде Java следующее:

"(forumdisplay.php\\?.*page=%CURRENTPAGE%)"

компилятор Java интерпретирует это как строку:

(forumdisplay.php\?.*page=%CURRENTPAGE%)

Механизм регулярных выражений Java делает то же самое, что и другие механизмы регулярных выражений - знак вопроса (поскольку он экранирован ) трактуется буквально.

То же самое происходит в Python - две приведенные ниже строки идентичны:

r"(forumdisplay.php\?.*page=%CURRENTPAGE%)"
"(forumdisplay.php\\?.*page=%CURRENTPAGE%)"

Здесь используется нотация Python r для «необработанной» строки, где обратная косая черта не интерпретируется компилятором.

3
ответ дан 3 December 2019 в 07:36
поделиться

Лично я использую в Eclipse ОТЛИЧНЫЕ плагины с сайта http://www.bastian-bergerhoff.com/eclipse/features/
Вы найдете там QuickREx для регулярных выражений, а также плагин разработчика XPath, который Я много пользуюсь.
Для QuickREx просто проверьте свое регулярное выражение и нажмите кнопку, чтобы скопировать его в активный редактор с хорошими escape-символами.
Это обязательно, просто попробуйте.

1
ответ дан 3 December 2019 в 07:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: