原始数据是:
auser1 home1b
auser2 home2b
auser3 home3b
Run Code Online (Sandbox Code Playgroud)
我想匹配一行,但它无法使用 ^(.*?)$
但是,我可以a(.*?)b用来匹配user1 home1.
我该怎么匹配 auser1 home1b
Bar*_*ers 58
默认情况下,^和$匹配开始和分别结束时的输入.您需要启用MULTI-LINE模式(?m),这会导致^并$匹配起始行和行尾:
(?m)^.*$
Run Code Online (Sandbox Code Playgroud)
演示:
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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
line = auser1 home1b line = auser2 home2b line = auser3 home3b
^.*$与任何事情都不匹配的事实是因为.默认情况下不匹配\r和\n.如果你启用DOT-ALL (?s),导致.它们匹配,你会看到匹配的整个输入字符串:
(?s)^.*$
Run Code Online (Sandbox Code Playgroud)
在这种情况下,你介意也下降了^,并$和单纯看该模式.*.由于.不匹配\n,你在寻找时会得到相同的匹配(?m)^.*$,正如@Kobi在评论中正确提到的那样.