如何解决如何使用Java正则表达式来匹配行
| 原始数据是:auser1 home1b
auser2 home2b
auser3 home3b
我想匹配一条线,但不能使用ѭ1it
但是,我可以使用a(.*?)b
来匹配user1 home1
。
我该如何匹配auser1 home1b
解决方法
默认情况下,
^
和$
分别匹配输入的开始和结束。您需要使用(?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());
}
}
}
产生以下输出:
行= auser1 home1b
行= auser2 home2b
行= auser3 home3b
编辑我
^.*$
不匹配的事实是因为默认情况下.
与match14ѭ和\\n
不匹配。如果您使用(?s)
启用DOT-ALL,并导致.
也与之匹配,则会看到整个输入字符串都已匹配:
(?s)^.*$
编辑二
在这种情况下,您还可以放下^
和$
,而只需寻找模式.*
。由于.
不匹配\\n
,因此在查找(?m)^.*$
时,您将得到相同的匹配项,正如@Kobi在评论中正确提及的那样。
,我们也可以使用标记MULTILINE
Matcher m = Pattern.compile(\"^.*$\",Pattern.MULTILINE).matcher(text);
这将启用多行模式,这将为您提供预期的结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。