我有一个用Python/Ruby/PHP定义的正则表达式,如下所示
"(forumdisplay.php\?.*page=%CURRENTPAGE%)"
在Java中,我必须将这个问号转义为\\?就像这样:
\\?
"(forumdisplay.php\\?.*page=%CURRENTPAGE%)";
有没有一个函数可以自动完成这个操作?或者我需要改变我所有的正则表达式来使用Java正则表达式引擎?
rta7y2nd1#
试试这个在线工具https://www.regexplanet.com/advanced/java/index.html它接受常规正则表达式并输出Java兼容的字符串表达式。节省了我自己转换巨大的正则表达式字符串的大量时间。注意,并非所有的正则表达式都能在java中工作。我见过奇怪的PHP验证正则表达式,它在Java模式匹配中的行为完全不同。
pxq42qpu2#
请注意,这不是需要双反斜杠的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表示法表示“原始”字符串,其中反斜杠不被编译器解释。
r
2条答案
按热度按时间rta7y2nd1#
试试这个在线工具https://www.regexplanet.com/advanced/java/index.html
它接受常规正则表达式并输出Java兼容的字符串表达式。节省了我自己转换巨大的正则表达式字符串的大量时间。
注意,并非所有的正则表达式都能在java中工作。我见过奇怪的PHP验证正则表达式,它在Java模式匹配中的行为完全不同。
pxq42qpu2#
请注意,这不是需要双反斜杠的Java正则表达式引擎,而是Java编译器。当你在Java源代码中编写以下代码时:
Java编译器将其解释为字符串:
Java正则表达式引擎然后做与其他正则表达式引擎完全相同的事情-问号(因为它被转义)被按字面意思处理。
类似的事情发生在Python中-下面的两个字符串是相同的:
这是使用Python
r
表示法表示“原始”字符串,其中反斜杠不被编译器解释。