Как делают я выражаю “:” но не предшествовавший “\\” в регулярном выражении Java?

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

8
задан jjujuma 25 April 2010 в 20:28
поделиться

2 ответа

Используйте отрицательный просмотр назад :

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

Причина появления четырех обратных косых черт:

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

Пример кода:

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

Вывод:

10
16
ответ дан 5 December 2019 в 10:01
поделиться

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

    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());
    }
1
ответ дан 5 December 2019 в 10:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: