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

时间:2011-05-26 18:24:33

标签: java regex

原始数据是:

auser1 home1b
auser2 home2b
auser3 home3b

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

无效

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

如何匹配auser1 home1b

2 个答案:

答案 0 :(得分:52)

默认情况下,^$分别匹配输入的开始和结束。您需要使用(?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)^.*$

编辑II

在这种情况下,您还要注意放弃^$,只需查找模式.*即可。由于.\n不匹配,因此在查找(?m)^.*$时,您最终会得到相同的匹配,正如评论中正确提到的@Kobi。

答案 1 :(得分:1)

我们还可以使用标志MULTILINE

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

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