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

per*_*ser 22 java regex

原始数据是:

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在评论中正确提到的那样.

  • 另一个偷偷摸摸的选择是匹配`.*`. (2认同)