Ответ 1
По умолчанию ^
и $
соответствуют соответственно началу и концу ввода. Вам нужно включить режим MULTI-LINE с помощью (?m)
, что приведет к тому, что ^
и $
будут соответствовать началу и концу строки:
(?m)^.*$
Демонстрация:
import java.util.regex.*;
public class Main {
public static void main(String[] args) throws Exception {
String text = "auser1 home1b\n" +
"auser2 home2b\n" +
"auser3 home3b";
Matcher m = Pattern.compile("(?m)^.*$").matcher(text);
while (m.find()) {
System.out.println("line = " + m.group());
}
}
}
выводит следующий результат:
line = auser1 home1b line = auser2 home2b line = auser3 home3b
EDIT я
Тот факт, что ^.*$
ничего не соответствует, потому что .
по умолчанию не соответствует \r
и \n
. Если вы включите DOT-ALL с помощью (?s)
, заставив .
также соответствовать этим, вы увидите, что вся входная строка соответствует:
(?s)^.*$
EDIT II
В этом случае вы также упустите ^
и $
и просто найдите шаблон .*
. Поскольку .
не будет соответствовать \n
, вы получите одинаковые совпадения при поиске (?m)^.*$
, так как @Kobi по праву упоминается в комментариях.