Как сопоставить любой символ, включая терминатор строки? - PullRequest
0 голосов
/ 05 мая 2018

У меня есть текст "текст ABC". Когда я использую шаблон "(. +) Abc", я нахожу совпадение "текст", это нормально. Но если я использую второй шаблон, "([.] {1,}) abc", matcher не найдет совпадений. Зачем?

Я хочу использовать скобки [], потому что я хочу использовать также символ строки разрыва (например, теперь я не могу сопоставить «text \ n abc» с первым шаблоном.

Извините за мой плохой английский

См. Также схему DOTALL: https://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#DOTALL

Мой код:

    String text = "text abc";
    Pattern pattern = Pattern.compile("(.+) abc");
    Matcher m = pattern.matcher(text);
    while (m.find()) {
        System.out.println(m.group(1));
    }

PS: моя цель - использовать шаблон типа "([. \ N] {1,}) abc".

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Прямо сейчас, образец ([.\n]{1,}) abc довольно назад. Во-первых, {1,} идентичен +, поэтому этот шаблон действительно ([.\n]+) abc. Во-вторых, как указано в руководствах по регулярным выражениям Oracle:

Примечание. В определенных ситуациях перечисленные выше специальные символы не будут рассматриваться как метасимволы.

В случае [.], . больше не является метасимволом регулярного выражения. В этом можно убедиться, проверив шаблон по строке "test . abc", которая сгруппирует ".".

Чтобы включить флаг DOTALL, просто добавьте параметр в регулярное выражение или вы можете добавить параметр в качестве параметра:

Pattern pattern = Pattern.compile("(?s)(.+) abc")

Pattern pattern = Pattern.compile("(.+) abc", Pattern.DOTALL)

Примечание ссылка

Полный список флагов и другая полезная информация

0 голосов
/ 05 мая 2018

Не ясно, что вы пытаетесь сопоставить, но если я правильно понимаю, ваша проблема с «text \ n abc». Вот из-за новой строки, чтобы исправить это используйте это

Pattern pattern = Pattern.compile("(.+) abc", Pattern.DOTALL);

Pattern.DOTALL флаг для "." чтобы соответствовать даже \ r или \ n.

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