Еще один вопрос по Java RegEx - PullRequest
3 голосов
/ 10 февраля 2011

У меня есть следующий код:

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 Ответ

4 голосов
/ 10 февраля 2011

Если у вас есть неэкранированный дефис в классе символов, он имеет специальное значение в качестве диапазона символов: например, [AZ] означает все символы между A и Z.

Исключением является случай, когдадефис находится в начале или в конце класса символов, в этом случае он трактуется буквально и соответствует только дефису.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...