Мне определили regex в Python/Ruby/PHP, который похож на это
"(forumdisplay.php\?.*page=%CURRENTPAGE%)"
Когда я делаю это для Java, я должен удвоить Escape тот вопросительный знак до \\?
Как так:
"(forumdisplay.php\\?.*page=%CURRENTPAGE%)";
Существует ли функция, которую я могу использовать, чтобы сделать это автоматически? Или я должен был бы переключить весь свой regexes для работы с Java regex механизма?
Хорошим началом обычно является простое "найти заменить все" "\" на "\\\".
На самом деле, вы не делаете изменений, чтобы заставить это работать с java regex engine. Вам просто приходится иметь дело с мучениями, связанными с хранением regex в строке Java... Вы могли бы сделать это в функции, но это привело бы к увеличению объема кода для поддержки. Я бы предложил сделать find replace, как описано выше...
Обратите внимание, что это не механизм регулярных выражений 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
для «необработанной» строки, где обратная косая черта не интерпретируется компилятором.
Лично я использую в Eclipse ОТЛИЧНЫЕ плагины с сайта http://www.bastian-bergerhoff.com/eclipse/features/
Вы найдете там QuickREx для регулярных выражений, а также плагин разработчика XPath, который Я много пользуюсь.
Для QuickREx просто проверьте свое регулярное выражение и нажмите кнопку, чтобы скопировать его в активный редактор с хорошими escape-символами.
Это обязательно, просто попробуйте.