strOutput.replace("/{{[^]*?}}/g","");
是否有一种方法可以将JavaScript正则表达式转换为Java安全的正则表达式?
上述语句给我报了以下错误:
"无效的转义序列(有效的序列为\b \t \n \f \r \" \' \\)。"
我对正则表达式并不是非常熟悉,所以需要一些指导。
谢谢!
strOutput.replace("/{{[^]*?}}/g","");
去掉正则表达式中的斜杠。在Java中,你不需要这些。此外,Java的正则表达式不识别像/g
和/i
这样的开关;它们由java.util.regex.Pattern
中的常量控制。
唯一有意义的JavaScript正则表达式开关在Java世界中是/i
和/m
。这些映射到Pattern.CASE_INSENSITIVE
和Pattern.MULTILINE
(当从Pattern
类创建一个正则表达式时,你可以使用这些开关,或者你可以在行内使用它们--稍后我会展示这个)。
/g
没有对应的映射,但你可以通过使用String.replaceAll
和String.replaceFirst
来控制替换行为。
要使你的代码工作,你需要做类似于这样的操作:
strOutput.replaceAll("{{[^]*?}}", "");
如果你希望使用开关,需要在正则表达式的开头添加类似于(?i)
的内容。注意不能使用String.replace
,因为它接受的是一个CharSequence
而不是正则表达式。此外,请记住,String
类提供的“快速正则表达式”方法可能不像您期望的那样工作。这是因为当您将模式(例如abc
)指定为matches
的正则表达式时,Java实际上看到的模式是^abc$
。因此,abc
会匹配,但abcd
不会匹配。更多信息请参见这里。将正则表达式开头和结尾的"/"
和"/g"
去掉。然后需要转义每个"\"
,变成"\\"
。
"g"表示全局匹配。在Java中使用正则表达式时,与使用正则表达式字符串有所不同。
你不需要在JavaScript中使用斜杠(正斜杠在开头和结尾),因为它们用于内联声明而不是引号。
应该只是 Regex r = new Regex("{{[^]*?}}");