Регулярное выражение Java не соответствует многострочной строке

Извините, я новичок в Java. Мне нужно сопоставить многострочную строку в Java, которая выглядит так:

meno je povinné pole
priezvisko je povinné pole
heslo je povinné pole
email je povinné pole
email nemá platný formát
musíte súhlasiť s podmienkami

И вот шаблон, соответствующий этой строке.

Pattern p = Pattern.compile("meno.+heslo", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE | Pattern.MULTILINE);
Matcher m = p.matcher(alert.getText().toLowerCase());  // text from the example

Что не так с этим? Если я тестирую только первую строку, она работает. Так что думаю проблема в линиях.


person Čamo    schedule 19.02.2020    source источник
comment
. не соответствует новой строке, попробуйте вместо нее meno[\s\S]+heslo.   -  person wp78de    schedule 19.02.2020
comment
Pattern.MULTILINE не изменяет поведение точек?   -  person Čamo    schedule 19.02.2020
comment
Нет, это делается флагом /s singleline/dotall.   -  person wp78de    schedule 19.02.2020
comment
Ответ уже здесь. Вы отвечаете не для Java. Вопрос о флаге Pattern.DOTALL   -  person Čamo    schedule 19.02.2020
comment
Это все еще дубликат. Вы можете найти десятки, если вы ищете, например. stackoverflow.com/questions/17824211 /   -  person wp78de    schedule 19.02.2020
comment
comment
Мой намного чище. Я предпочитаю более чистые простые вопросы перед запутанными конкретными проблемами, такими как модификатор (?m) ...   -  person Čamo    schedule 19.02.2020


Ответы (1)


. не будет соответствовать новой строке, чтобы исправить это, используйте флаг DOTALL при компиляции шаблона.

 Pattern.DOTALL

Флаг MULTILINE будет делать только следующее:

«В многострочном режиме выражения ^ и $ совпадают сразу после или непосредственно перед, соответственно, знаком конца строки или концом входной последовательности».

person rhowell    schedule 19.02.2020