如何将 JavaScript 正则表达式转换为安全的 Java 正则表达式?

9
strOutput.replace("/{{[^]*?}}/g","");

是否有一种方法可以将JavaScript正则表达式转换为Java安全的正则表达式?
上述语句给我报了以下错误:
"无效的转义序列(有效的序列为\b \t \n \f \r \" \' \\)。"
我对正则表达式并不是非常熟悉,所以需要一些指导。
谢谢!

1
你能发一下你创建的Java代码,让我们看看出了什么错误吗? - Peter Bailey
3个回答

14

去掉正则表达式中的斜杠。在Java中,你不需要这些。此外,Java的正则表达式不识别像/g/i这样的开关;它们由java.util.regex.Pattern中的常量控制。

唯一有意义的JavaScript正则表达式开关在Java世界中是/i/m。这些映射到Pattern.CASE_INSENSITIVEPattern.MULTILINE(当从Pattern类创建一个正则表达式时,你可以使用这些开关,或者你可以在行内使用它们--稍后我会展示这个)。

/g没有对应的映射,但你可以通过使用String.replaceAllString.replaceFirst来控制替换行为。

要使你的代码工作,你需要做类似于这样的操作:

strOutput.replaceAll("{{[^]*?}}", "");
如果你希望使用开关,需要在正则表达式的开头添加类似于(?i)的内容。注意不能使用String.replace,因为它接受的是一个CharSequence而不是正则表达式。此外,请记住,String类提供的“快速正则表达式”方法可能不像您期望的那样工作。这是因为当您将模式(例如abc)指定为matches的正则表达式时,Java实际上看到的模式是^abc$。因此,abc会匹配,但abcd不会匹配。更多信息请参见这里

2

将正则表达式开头和结尾的"/""/g"去掉。然后需要转义每个"\",变成"\\"

"g"表示全局匹配。在Java中使用正则表达式时,与使用正则表达式字符串有所不同。


0

你不需要在JavaScript中使用斜杠(正斜杠在开头和结尾),因为它们用于内联声明而不是引号。

应该只是 Regex r = new Regex("{{[^]*?}}");


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接