温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java正则怎么匹配多行

发布时间:2026-09-14 04:36:26 来源:亿速云 阅读:97 作者:小樊 栏目:编程语言

在 Java 中,正则匹配多行文本主要涉及两个关键点:

  1. 使用正确的正则标志(FLAG)
  2. 理解 . 是否匹配换行符

下面分情况说明。


一、Java 中常用的多行相关标志

1️⃣ Pattern.MULTILINE(多行模式)

影响:

  • ^ 匹配 每一行的开头
  • $ 匹配 每一行的结尾
Pattern p = Pattern.compile("^abc", Pattern.MULTILINE);

示例:

abc123
def
abc456

^abc 会匹配 两处


2️⃣ Pattern.DOTALL(单行模式 / 点匹配换行)

影响:

  • . 可以匹配 换行符 \n
Pattern p = Pattern.compile("a.*b", Pattern.DOTALL);

二、匹配“多行内容”的几种常见场景

✅ 场景 1:匹配跨多行的一段文本

例如匹配:

start
line1
line2
end

正则:

String regex = "start[\\s\\S]*?end";
Pattern p = Pattern.compile(regex);

或(推荐):

Pattern p = Pattern.compile("start.*?end", Pattern.DOTALL);

✅ 场景 2:逐行匹配(MULTILINE)

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

✅ 场景 3:匹配某一行之后的所有内容

Pattern p = Pattern.compile("^title\\n(.*)", Pattern.MULTILINE | Pattern.DOTALL);

三、String 里的简写方式

text.matches("(?s).*error.*"); // (?s) = DOTALL
text.matches("(?m)^error.*");  // (?m) = MULTILINE

四、常见坑

❌ 默认 . 不匹配换行 ✅ 用 DOTALL 或 [\\s\\S]

❌ ^ $ 默认只匹配整个字符串首尾
✅ 用 MULTILINE


如果你有具体的文本样例 + 想匹配什么,可以直接发出来,我帮你写精确的正则。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手