如何将 javascript 正则表达式转换为安全的 Java 正则表达式?
Posted
技术标签:
【中文标题】如何将 javascript 正则表达式转换为安全的 Java 正则表达式?【英文标题】:How to convert javascript regex to safe java regex? 【发布时间】:2011-06-14 21:01:54 【问题描述】:strOutput.replace("/[^]*?/g","");
有没有办法将 javascript 正则表达式转换为 Java 安全的正则表达式?
上面的语句给了我错误:
Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
我对正则表达式不是很熟悉,所以我可以使用一些指导。
谢谢!
【问题讨论】:
您可以发布您创建的导致错误的 Java 吗? 【参考方案1】:去掉正斜杠。你不需要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
会匹配,但abcd
不会。
还有更多信息here。
【讨论】:
【参考方案2】:去掉正则表达式开头和结尾的"/"
和"/g"
。然后你需要像这样逃避每一个"\"
:"\\"
。
“g”部分表示全局。这由您在 Java 中使用正则表达式的方式控制,而不是在正则表达式字符串中。
【讨论】:
【参考方案3】:您不需要 /
(开始和结束处的正斜杠)在 javascript 中用于内联声明而不是引号。
应该只是Regex r = new Regex("[^]*?");
【讨论】:
以上是关于如何将 javascript 正则表达式转换为安全的 Java 正则表达式?的主要内容,如果未能解决你的问题,请参考以下文章
将 c# 正则表达式转换为 javascript 正则表达式
将 po box javascript 正则表达式转换为 c# 正则表达式