如何使用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);
这将启用多线模式,这将为您提供预期的结果。