在 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);
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)| Flag | 写法 | 作用 |
|---|---|---|
| DOTALL | (?s) |
. 匹配换行 |
| MULTILINE | (?m) |
^ $ 匹配每行 |
| CASE_INSENSITIVE | (?i) |
忽略大小写 |
如果你有具体要匹配的多行文本样例,可以直接发出来,我可以帮你写正则。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。