Java正则表达式替换所有边界不起作用

时间:2014-01-02 01:24:44

标签: java regex

    System.out.println("R.A.F. stands for R.A.F. blablabla".replaceAll(
            "\\bR\\.A\\.F\\.\\b", "royal airforce army"));

我想用“皇家空军”代替弦中的第二个R.A.F,为什么它不起作用?

2 个答案:

答案 0 :(得分:0)

字边界匹配任何点:

  • 前一个字符是单词字符,下一个字符不是(或字符串的结尾)
  • 下一个字符是单词字符,而前一个字符不是(或字符串的开头)。

由于.不是单词字符,因此模式\.\b只匹配后跟单词字符的.,即它将匹配R.A.F.foo,但不是R.A.F. foo

如果你想确保它与紧跟一个单词字符的R.A.F.不匹配,请改用:

"\\bR\\.A\\.F\\.(?!\\w)"

但是这将替换示例输入中的两个实例,因为第一个R.A.F前面是字符串的开头。如果你只想替换第二个,我建议使用这样的东西:

"(?<=\\W)R\\.A\\.F\\.(?!\\w)"

答案 1 :(得分:0)

我会尝试:

System.out.println("R.A.F. stands for R.A.F. blablabla".replaceAll(
                   "\\sR\\.A\\.F\\.", " royal airforce army"));

<强>输出:

R.A.F. stands for royal airforce army blablabla

<强> PS: 注意我在“皇家空军部队”之前增加了一个空间。