我有以下字符串
\Qpipe,name=office1\E
我正在使用不支持\Q
和\E
的简化正则表达式库。
我尝试删除它们
s.replaceAll("\\Q", "").replaceAll("\\E", "")
但是,我收到错误Caused by: java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 1
\E
^
有什么想法吗?
答案 0 :(得分:13)
\
是Java字符串和正则表达式引擎中的特殊转义字符。要将文字\
传递给正则表达式引擎,您需要在Java字符串中包含\\\\
。所以试试:
s.replaceAll("\\\\Q", "").replaceAll("\\\\E", "")
或者更简单的方法是使用replace
方法,它采用字符串而不是正则表达式:
s.replace("\\Q", "").replace("\\E", "")
答案 1 :(得分:2)
使用Pattern.quote()函数转义正则表达式中的特殊字符,例如
s.replaceAll(Pattern.quote("\Q"), "")
答案 2 :(得分:1)
replaceAll
采用正则表达式字符串。相反,只需使用带有文字字符串的replace
。所以myRegexString.replace("\\Q", "").replace("\\E", "")
。
但是这仍然会给你的简化正则表达式引用特殊正则表达式字符的问题。
答案 3 :(得分:0)
String.replaceAll()将正则表达式作为参数,因此您需要两次转义反斜杠:
s.replaceAll("\\\Q", "").replaceAll("\\\\E", "");