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

2022-09-03 00:43:25

我有一个在Python / Ruby / PHP中定义的正则表达式,如下所示

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

当我为Java做这件事时,我必须加倍地把这个问号转义到\\?

这样:

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

有没有一个函数可以用来自动做到这一点?或者我需要更改所有正则表达式才能使用Java正则表达式引擎?


答案 1

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

它采用您的普通正则表达式并输出与 Java 兼容的字符串表达式。为我节省了大量的时间,我自己转换了巨大的正则表达式字符串。

请注意,并非所有正则表达式都适用于 java。我见过奇怪的PHP验证正则表达式,它在java模式匹配中的行为有所不同。


答案 2

请注意,这不是需要双反斜杠的 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