如何使用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);