Cómo usar java regex para que coincida con una línea

La información sin procesar es:

auser1 home1b auser2 home2b auser3 home3b 

Quiero hacer coincidir una línea, pero no funciona usando ^(.*?)$

Sin embargo, puedo usar a(.*?)b para user1 home1 .

¿Cómo puedo auser1 home1b

Por defecto, ^ y $ coinciden con el inicio y el final de la entrada, respectivamente. Tendrá que habilitar el modo MULTI-LINE con (?m) , lo que hace que ^ y $ coincidan con el inicio y el final de la línea:

 (?m)^.*$ 

La demo

 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()); } } } 

produce el siguiente resultado:

  line = auser1 home1b
 line = auser2 home2b
 line = auser3 home3b 

EDITAR I

El hecho de que ^.*$ No coincida con nada es porque el . de forma predeterminada no coincide con \r y \n . Si habilita DOT-ALL con (?s) , causando el . para que coincida con ellos también, verá que se está haciendo coincidir toda la cadena de entrada:

 (?s)^.*$ 

EDIT II

En este caso, también te importa soltar ^ y $ y simplemente busca el patrón .* . Desde . no coincidirá \n , terminará con las mismas coincidencias cuando busque (?m)^.*$ , como @Kobi se menciona correctamente en los comentarios.

también podemos usar la bandera MULTILINE ,

  Matcher m = Pattern.compile("^.*$",Pattern.MULTILINE).matcher(text); 

Esto habilitará el modo multilínea que le dará el resultado esperado.