在 Java 中,正则匹配多行文本主要涉及两个关键点:
. 是否匹配换行符下面分情况说明。
Pattern.MULTILINE(多行模式)影响:
^ 匹配 每一行的开头$ 匹配 每一行的结尾Pattern p = Pattern.compile("^abc", Pattern.MULTILINE);
示例:
abc123
def
abc456
^abc 会匹配 两处
Pattern.DOTALL(单行模式 / 点匹配换行)影响:
. 可以匹配 换行符 \nPattern p = Pattern.compile("a.*b", Pattern.DOTALL);
例如匹配:
start
line1
line2
end
正则:
String regex = "start[\\s\\S]*?end";
Pattern p = Pattern.compile(regex);
或(推荐):
Pattern p = Pattern.compile("start.*?end", Pattern.DOTALL);
String text = "error: a\nerror: b\nok";
Pattern p = Pattern.compile("^error:.*$", Pattern.MULTILINE);
Matcher m = p.matcher(text);
while (m.find()) {
System.out.println(m.group());
}
输出:
error: a
error: b
Pattern p = Pattern.compile("^title\\n(.*)", Pattern.MULTILINE | Pattern.DOTALL);
text.matches("(?s).*error.*"); // (?s) = DOTALL
text.matches("(?m)^error.*"); // (?m) = MULTILINE
❌ 默认 . 不匹配换行
✅ 用 DOTALL 或 [\\s\\S]
❌ ^ $ 默认只匹配整个字符串首尾
✅ 用 MULTILINE
如果你有具体的文本样例 + 想匹配什么,可以直接发出来,我帮你写精确的正则。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。