Как создать отрицательный шаблон charclass? - PullRequest
0 голосов
/ 26 февраля 2011

Мне нужен метод, принимающий шаблон в качестве аргумента и возвращающий отрицательный шаблон. Шаблон ввода всегда является charclass (иначе это было бы невозможно). Простая попытка

public Pattern negate(Pattern p) {
    return Pattern.compile("[^" + p.pattern() + "]");
}

private void test() {
    final Pattern p = Pattern.compile("[a-z]");
    final Pattern n = negate(p);
    System.out.println(n.matcher("0").matches());
}

терпит неудачу из-за того, что [ в [^[ (в отличие от [^xyz[) воспринимается буквально вместо начала вложенного charclass.

1 Ответ

0 голосов
/ 26 февраля 2011

Вы не можете вложить такие классы символов таким образом.

Если вы всегда знаете, что получаете класс символов, проще всего было бы обрезать входную строку его скобок:

public Pattern negate(Pattern p) {
    return Pattern.compile("[^" + p.pattern().substring(1));
}

Более надежный метод - анализировать входные данные с регулярными выражениями ...:)

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