将正则表达式转换为兼容java的正则表达式的简便方法?

Jam*_*mes 11 java regex

我有一个在Python/Ruby/PHP中定义的正则表达式,就像这样

"(forumdisplay.php\?.*page=%CURRENTPAGE%)"
Run Code Online (Sandbox Code Playgroud)

当我为Java做这件事时,我必须双重逃避该问号 \\?

像这样:

"(forumdisplay.php\\?.*page=%CURRENTPAGE%)";
Run Code Online (Sandbox Code Playgroud)

有没有我可以用来自动完成的功能?或者我是否需要更改所有正则表达式以使用Java正则表达式引擎?

Eri*_*hen 12

试试这个在线工具:http://www.regexplanet.com/advanced/java/index.html

它采用正常的正则表达式并输出兼容java的字符串表达式.节省了我自己转换巨大的正则表达式字符串的大量时间.

请注意,并非所有正则表达式都适用于java.我已经看到奇怪的PHP验证正则表达式,在java模式匹配中只是表现不同.

  • 这个人有答案 (2认同)

Gre*_*ill 4

请注意,这不是需要双反斜杠的 Java 正则表达式引擎,而是 Java编译器。当你在Java源代码中编写以下内容时:

"(forumdisplay.php\\?.*page=%CURRENTPAGE%)"
Run Code Online (Sandbox Code Playgroud)

Java 编译器将其解释为字符串:

(forumdisplay.php\?.*page=%CURRENTPAGE%)
Run Code Online (Sandbox Code Playgroud)

然后,Java 正则表达式引擎执行与其他正则表达式引擎完全相同的操作 - 问号(因为它是转义的)按字面意思处理。

Python 中也会发生类似的情况 - 下面的两个字符串是相同的:

r"(forumdisplay.php\?.*page=%CURRENTPAGE%)"
"(forumdisplay.php\\?.*page=%CURRENTPAGE%)"
Run Code Online (Sandbox Code Playgroud)

这是使用 Pythonr表示法表示“原始”字符串,其中编译器不解释反斜杠。