Java regex: сопоставление подстроки с символом новой строки, за которым следует пробел - PullRequest
1 голос
/ 03 февраля 2011

В настоящее время я пытаюсь извлечь подстроки из строк, сопоставив их с регулярным выражением.Все строки ввода имеют вид foo.bar("""foobar"""), где foobar - это подстрока, которую я хотел бы извлечь.Это регулярное выражение, которое я написал для этой задачи:

Pattern pattern = Pattern.compile(
            ".+\\(\"{3}(.+)\"{3}\\)" , Pattern.MULTILINE);

Оно хорошо сопоставляется с простыми строками, но завершается неудачно всякий раз, когда в строке для сопоставления встречается новая строка, за которой следует пробел, т.е. foo.bar("""foo\n bar""")

Как мне изменить шаблон, чтобы он соответствовал и этим строкам?

1 Ответ

7 голосов
/ 03 февраля 2011

Вам нужно Pattern.DOTALL вместо Pattern.MULTILINE. Pattern.MULTILINE относится к поведению ^ и $ и не имеет ничего общего с соответствием новых строк с .:

Pattern pattern = Pattern.compile(
     ".+\\(\"{3}(.+)\"{3}\\)" , Pattern.DOTALL); 
...