Это не имеет ничего общего с флагом MULTILINE; то, что вы видите, - это разница между методами find()
и matches()
. find()
преуспевает, если совпадение найдено в любом месте целевой строки , в то время как matches()
ожидает, что регулярное выражение будет соответствовать всей строке .
Pattern p = Pattern.compile("xyz");
Matcher m = p.matcher("123xyzabc");
System.out.println(m.find()); // true
System.out.println(m.matches()); // false
Matcher m = p.matcher("xyz");
System.out.println(m.matches()); // true
Кроме того, MULTILINE
не означает, что вы думаете, что он делает. Многие люди, похоже, приходят к выводу, что вы должны использовать этот флаг, если ваша целевая строка содержит символы новой строки, то есть если она содержит несколько логических строк. Я видел здесь несколько ответов на SO, но на самом деле весь этот флаг изменяет поведение якорей, ^
и $
.
Обычно ^
соответствует самому началу целевой строки, а $
соответствует самому концу (или перед новой строкой в конце, но мы оставим это в стороне на данный момент). Но если строка содержит символы новой строки, вы можете выбрать для ^
и $
совпадение в начале и конце любой логической строки, а не только начало и конец всей строки, установив флаг MULTILINE.
Так что забудьте о том, что MULTILINE
означает и просто помните, что он делает : изменяет поведение якорей ^
и $
. Режим DOTALL
изначально назывался «однострочным» (и все еще в некоторых вариантах, включая Perl и .NET), и он всегда вызывал подобное замешательство. Нам повезло, что разработчики Java пошли с более описательным именем в этом случае, но не было разумной альтернативы для «многострочного» режима.
В Perl, где все это безумие началось, они признали свою ошибку и избавились от «многострочных» и «однострочных» режимов в Perl 6 регулярных выражениях. Еще через двадцать лет, возможно, остальной мир последует этому примеру.
Select * from indexed_view
не гарантирует ничего о порядке, возвращаемом из запроса. (как следует из комментария). Поэтому, пожалуйста, не думайте, что или ваше приложение может сломаться.
Что касается «почему вы не можете создать индексированное представление для системных таблиц?» есть несколько причин для этого.