不要将String读作Regex,请阅读AS IS

时间:2013-12-27 20:51:44

标签: java regex

基本上我使用以下代码

message.replaceFirst(cmd, "");

这很好,但有时cmd的值是“\”,这会导致问题,因为它试图将其作为正则表达式读取并给出以下错误

Caused by: java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
^
at java.util.regex.Pattern.error(Unknown Source) ~[?:1.7.0_45]
at java.util.regex.Pattern.compile(Unknown Source) ~[?:1.7.0_45]
at java.util.regex.Pattern.<init>(Unknown Source) ~[?:1.7.0_45]
at java.util.regex.Pattern.compile(Unknown Source) ~[?:1.7.0_45]
at java.lang.String.replaceFirst(Unknown Source) ~[?:1.7.0_45]

基本上我想知道是否有办法让它读取这个AS而不试图将它用作Regex。

提前致谢

2 个答案:

答案 0 :(得分:3)

您必须使用Pattern#quote,因为\是RegEx中的特殊字符。

message.replaceFirst(Pattern.quote(cmd), "");

您也可以在替换字符串中遇到相同类型的问题,在这种情况下使用Matcher#quoteReplacement

答案 1 :(得分:2)

对于原样,请使用:

String str = Pattern.compile(cmd, Pattern.LITERAL)
                    .matcher(message)
                    .replaceFirst("");