Java - 在正则表达式中转义元字符 [ 和 ]

3

我试图将一个字符串中第一次出现的"[]"替换为另一个字符串:

aString.replaceFirst("[]", "blah");

但是我收到了以下错误信息: java.util.regex.PatternSyntaxException: Unclosed character class near index 1 []

显然,[和]是元字符,但当我尝试使用\进行转义时,Eclipse会报告其不是有效的转义序列。

我已经查找过了,但没有找到答案,我错过了什么吗?

谢谢


2
使用Pattern.quote方法怎么样?(如此问题所示) - Brad Christie
好的,非常感谢。Pattern.quote() 生成了一个字符串,Eclipse 不接受(使用 \Q 和 \E),但这是一个有效的解决方法。谢谢。 - ZirconCode
3个回答

6
正则表达式模式使用\作为转义字符,但Java也是如此。因此,要在正则表达式模式中获得一个单一的转义符(\),您应该编写:\\。要在正则表达式中转义一个转义符,请将模式加倍:\\\\
当然,这非常繁琐,因为正则表达式有很多类似的转义序列。这就是为什么Java正则表达式还支持“引用”模式的字面部分,这使您可以将模式编写为:\\Q[]\\E
编辑:正如其他答案所暗示的那样:java.util.regex.Pattern.quote()\\Q\\E之间执行此包装。

这个有效。我尝试了\Q和\E,但没有使用双反斜杠。谢谢。3分钟后接受作为答案。 - ZirconCode

4
尝试使用 \\[ 和 \\]。需要双重转义,因为 \ 对于字符串也是一个转义字符(就像在文本中使用双引号时的 \" 一样)。因此,要在字符串中获取 \,必须使用 \\。

那没有抛出错误,但它实际上没有替换[]并按预期工作。我不知道为什么它失败了。然而,使用Pattern.quote()可以解决问题。 - ZirconCode

2
aString.replaceFirst("\\[\\]", "blah");

或者在更一般的情况下。
aString.replaceFirst(java.util.regex.Pattern.quote("[]"), "blah");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接