如何将javascript正则表达式转换为安全的java正则表达式?
strOutput.replace("/{{[^]*?}}/g","");
有没有办法将JavaScript正则表达式转换为Java安全正则表达式?
上面的陈述给了我错误:
Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
我对正则表达式并不熟悉,所以我可以使用一些指导。
谢谢!
摆脱正斜杠。 你不需要Java中的那些。 此外,Java的正则表达式无法识别/g
和/i
类的开关; 这些由java.util.regex.Pattern
的常量控制。
在Java世界中唯一有意义的Javascript正则表达式开关是/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
会匹配,但是bc
不会。
这里有更多信息。
在正则表达式的开头和结尾摆脱"/"
和"/g"
。 然后你需要像这样转义每个"\"
事件: "\\"
。
“g”部分意味着全球化。 这取决于您如何在Java中使用正则表达式而不是在正则表达式字符串中使用正则表达式。
你不需要在javascript中用于内联声明而不是引号的/
(s开头和结尾的正斜杠)。
应该只是Regex r = new Regex("{{[^]*?}}");