另一个Java正则表达式问题
我有以下代码:
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.023下测试
# 1 楼答案
如果在一个字符类中有一个不带换行符的连字符,它作为一系列字符有一个特殊的含义:例如,[a-Z]表示a和Z之间的所有字符
例外情况是,连字符位于字符类的开头或结尾,在这种情况下,它会被逐字处理,并且只匹配一个连字符