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

如何使用java正则表达式匹配行,java,regex,Java,Regex,原始数据是: auser1 home1b auser2 home2b auser3 home3b 我想匹配一行,但使用^(.*?$ 但是,我可以使用a(.*b来匹配user1 home1 默认情况下,^和$如何匹配输入的开始和结束。您需要使用(?m)启用多行模式,这将导致^和$匹配行的开始和结束: (?m)^.*$ 演示: import java.util.regex.*; public class Main { public static void main(String[] a

原始数据是:

auser1 home1b
auser2 home2b
auser3 home3b
我想匹配一行,但使用
^(.*?$

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


默认情况下,
^
$
如何匹配输入的开始和结束。您需要使用
(?m)
启用多行模式,这将导致
^
$
匹配行的开始和结束:

(?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 编辑二
在这种情况下,您可以放下
^
$
,只需查找模式
*
。由于
将不匹配
\n
,因此您在查找
(?m^.*$
时将得到相同的匹配,正如@Kobi在注释中正确地提到的那样。

我们也可以使用标志
多行

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

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

显示您正在使用的代码行:
^(.*)$
表达式应该可以工作。为什么不能在新行上拆分?您能告诉我为什么^(.*)$match nothing?另一个狡猾的选项是为
*
@performanceuser匹配。还请注意,影响
^
$
锚定的多行模式
(?s)
,独立于影响
操作符的单线模式
。您可以合理地组合多行和单行模式,但这不是您想要的。@performanceuser默认情况下,多行模式被禁用,因此
^
$
仅匹配输入字符串的开始和结束,而不是在输入字符串中的每个换行之后和之前。并且单行模式被禁用,因此
与换行符不匹配。这就是为什么
^.*$
不能将输入字符串与换行符匹配。@EngledLoops我发现文档对此不太清楚。当启用多行模式时(默认情况下不是),它们只是行的开始和结束字符。所以,仅仅说他们是一行的开始和结束是不正确的。
 Matcher m = Pattern.compile("^.*$",Pattern.MULTILINE).matcher(text);