Как мне выразить «:», но не предшествовать «\» в регулярном выражении Java? - PullRequest
7 голосов
/ 26 апреля 2010

Как я могу выразить "не предшествует" в регулярном выражении Java? Например, я хотел бы искать «:», но только если ему непосредственно не предшествует «\». Как я могу это сделать?

Ответы [ 2 ]

15 голосов
/ 26 апреля 2010

Использование негативного вида сзади :

"(?<!\\\\):"

Причина четырех обратных слешей:

  • обратная косая черта - это специальный символ в регулярных выражениях, поэтому вам нужно регулярное выражение \\ для сопоставления с одной обратной косой чертой.
  • Обратные косые черты должны быть экранированы в строках Java, поэтому каждая из указанных выше обратных косых черт должна быть записана как \\, что дает в общей сложности четыре.

Пример кода:

Pattern pattern = Pattern.compile("(?<!\\\\):");
Matcher matcher = pattern.matcher("foo\\:x bar:y");
if (matcher.find()) {
    System.out.println(matcher.start());
}

Выход:

10
1 голос
/ 26 апреля 2010

Вы пытались использовать класс символов с оператором дополнения?

    String s1 = "foo : bar";
    String s2 = "foo \\: bar";

    Pattern p  = Pattern.compile("[^\\\\]:");

    Matcher m = p.matcher(s1);
    if(m.find()) {
        System.out.println(m.group());
    }

    m = p.matcher(s2);
    if(m.find()) {
        System.out.println(m.group());
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...