Java – 在Regex中转义元字符
我试图在另一个字符串中替换第一次出现的字符串“[]”:
aString.replaceFirst(“[]”,“blah”);
我收到错误:java.util.regex.PatternSyntaxException:索引1 []附近的未闭合字符类
[和]显然是元字符,但是当我试图用\ eclipse来逃避它们时,抱怨它不是一个有效的转义序列。
我看了但是找不到,我错过了什么?
谢谢
正则表达式模式使用\
作为转义字符,但Java也是如此。 因此,要在正则表达式模式中获得单个转义符( \
),您应该写: \\
。 要逃避正则表达式中的转义,请将模式加倍: \\\\
。
当然,这是非常乏味的,因为正则表达式有这么多的逃脱序列,所以更糟糕。 这就是为什么Java正则表达式还支持“引用”模式的“部分”部分,这允许您将模式编写为: \\Q[]\\E
编辑:正如另一个答案提示: java.util.regex.Pattern.quote()
在\\Q
和\\E
之间执行此包装。
试试\\ [和\\]。 你需要双重转义,因为\也是字符串的转义字符(当你想在文本中使用双引号时也是如此)。因此,要在字符串中得到\,你必须使用\\。
aString.replaceFirst("\\[\\]", "blah");
或者在更一般的情况下
aString.replaceFirst(java.util.regex.Pattern.quote("[]"), "blah");