温馨提示×

温馨提示×

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

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

java regex如何匹配多行

发布时间:2026-10-04 22:20:17 来源:亿速云 阅读:93 作者:小樊 栏目:编程语言

在 Java 中,正则默认是“单行模式”(. 不匹配换行符),要匹配多行文本,需要根据你的需求使用不同方式。下面按常见场景说明。


一、让 . 能匹配换行符(最常见)

默认情况下:

"a\nb".matches("a.b"); // false

解决:使用 Pattern.DOTALL((?s))

Pattern p = Pattern.compile("a.b", Pattern.DOTALL);
// 或
Pattern p = Pattern.compile("(?s)a.b");

✅ 这样 . 可以匹配 \n、\r 等


二、按“行”处理(^ 和 $ 匹配每行)

默认 ^ $ 只匹配整个字符串首尾。

使用 Pattern.MULTILINE((?m))

String text = "line1\nline2\nline3";

Pattern p = Pattern.compile("^line\\d$", Pattern.MULTILINE);
Matcher m = p.matcher(text);

while (m.find()) {
    System.out.println(m.group());
}

输出:

line1
line2
line3

三、同时支持多行 + 点匹配换行

Pattern p = Pattern.compile("(?s)(?m)^start.*?end$");

或:

Pattern.compile("^start.*?end$", 
    Pattern.MULTILINE | Pattern.DOTALL);

四、匹配“多行块”示例

示例:匹配 XML / 日志块

String text = "BEGIN\nhello\nworld\nEND";

Pattern p = Pattern.compile("BEGIN.*?END", Pattern.DOTALL);
Matcher m = p.matcher(text);

if (m.find()) {
    System.out.println(m.group());
}

五、读取多行文本注意点

  • 从文件读取时,确保使用:
new String(Files.readAllBytes(Path), StandardCharsets.UTF_8)
  • 注意换行符可能是 \r\n(Windows)

六、常用 flags 速查

Flag 写法 作用
DOTALL (?s) . 匹配换行
MULTILINE (?m) ^ $ 匹配每行
CASE_INSENSITIVE (?i) 忽略大小写

如果你有具体要匹配的多行文本样例,可以直接发出来,我可以帮你写正则。

向AI问一下细节

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

AI
助
手