Java - 在Regex中转义元字符[和]

时间:2011-10-26 15:07:15

标签: java regex escaping

我试图在另一个字符串中替换第一次出现的字符串“[]”:

aString.replaceFirst(“[]”,“blah”);

我收到错误: java.util.regex.PatternSyntaxException:索引1附近的未闭合字符类[]

[和]显然是元字符,但是当我试图用它来逃避它们时 eclipse抱怨它不是一个有效的转义序列。

我看了但找不到,我错过了什么?

谢谢

3 个答案:

答案 0 :(得分:5)

正则表达式模式使用\作为转义字符,但Java也是如此。因此,要以正则表达式模式获取转义(\),您应该写:\\。要逃避正则表达式中的转义,请将模式加倍:\\\\

当然,这是非常乏味的,因为正则表达式有很多这样的逃脱序列。这就是为什么Java正则表达式还支持“引用”模式的“部分”部分,这使您可以将模式编写为:\\Q[]\\E

编辑:正如其他答案提示:java.util.regex.Pattern.quote()\\Q\\E之间执行此换行。

答案 1 :(得分:4)

尝试\\ [和\\]。你需要双重转义,因为\也是字符串的转义字符(当你想在文本中使用双引号时也是如此)。因此,要在字符串中获得\,你必须使用\\。

答案 2 :(得分:2)

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

或更一般的情况

aString.replaceFirst(java.util.regex.Pattern.quote("[]"), "blah");