另一个Java RegEx问题

时间:2011-02-10 06:47:51

标签: java regex

我有以下代码:

public static void main(String[] args){
    StringBuilder content = new StringBuilder("abcd efg h i. -  – jk(lmn) qq zz.");
    String patternSource = "[.-–]($| )";
    Pattern pattern = Pattern.compile(patternSource);
    Matcher matcher = pattern.matcher(content);
    System.out.println(matcher.replaceAll(""));
}

其中patternSource字符类由点,减号和\ u2013字符组成(类似长划线)。执行后给我

abcefi-  jk(lmn) qzz

如果我以任何方式改变我的角色类中的符号顺序,它就会正常工作,并给出

abcd efg h i jk(lmn) qq zz

到底是什么?

在JDK / JRE 1.6.0_23下测试

1 个答案:

答案 0 :(得分:4)

如果在字符类中有未转义的连字符,则它具有一系列字符的特殊含义:例如[A-Z]表示A和Z之间的所有字符。

这是一个例外,当连字符位于字符类的开头或结尾时,在这种情况下它按字面处理并仅匹配连字符。