如何使用java正则表达式来匹配一行

原始数据是:

auser1 home1b auser2 home2b auser3 home3b 

我想匹配一行,但它不能使用^(.*?)$

但是,我可以使用a(.*?)b来匹配user1 home1

我怎样才能匹配auser1 home1b

默认情况下, ^$匹配输入的开始和结束。 您需要使用(?m)启用MULTI-LINE模式,这会导致^$匹配起始行和行尾:

 (?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 

编辑我

^.*$与任何东西都不匹配的事实是因为. 默认情况下与\r\n不匹配。 如果使用(?s)启用DOT-ALL,则会导致. 为了匹配这些,你会看到匹配的整个输入字符串:

 (?s)^.*$ 

编辑二

在这种情况下,您还要注意删除^$并简单地查找模式.* 。 自从. 不会匹配\n ,你会在寻找(?m)^.*$时得到相同的匹配,正如评论中正确提到的@Kobi。

我们也可以使用旗帜MULTILINE

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

这将启用多线模式,这将为您提供预期的结果。