Простой способ преобразовать регулярное выражение в Java-совместимое регулярное выражение? - PullRequest
11 голосов
/ 01 июня 2010

У меня есть регулярное выражение, определенное в Python / Ruby / PHP, которое выглядит так

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

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

Вот так:

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

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

Ответы [ 4 ]

11 голосов
/ 18 апреля 2012

Попробуйте этот онлайн-инструмент: http://www.regexplanet.com/advanced/java/index.html

Он принимает ваше обычное регулярное выражение и выводит java-совместимое строковое выражение. Я сэкономил массу времени на преобразование огромных строк регулярных выражений.

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

3 голосов
/ 01 июня 2010

Обратите внимание, что это не механизм регулярных выражений 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 для «необработанной» строки, в которой обратный слеш не интерпретируется компилятором.

1 голос
/ 01 июня 2010

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

0 голосов
/ 01 июня 2010

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

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

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