终极指南:如何使用正则表达式匹配所有内容(包含换行符)

发布时间: 2026-07-15
作者: DP
浏览数: 1 次
分类: 编程
内容
在日常开发中,我们经常需要使用正则表达式来提取或匹配大段多行文本。很多新手会直觉地使用 `.*`,却发现它无法跨行匹配。这是因为在大多数正则引擎中,点号 `.` 默认是不匹配换行符(` ` 或 `\r`)的。 今天,DP@lib00 就来为大家梳理几种真正能匹配“所有内容”(包含换行符)的正则表达式写法,并补充实际应用中的注意事项。 ## 1. 通用写法:`[\s\S]*`(强烈推荐) 这是最稳健、跨平台的写法,利用互补的字符集来表示“任意字符”: ```regex [\s\S]* ``` * `\s`: 匹配任何空白字符(空格、制表符、换行符等)。 * `\S`: 匹配任何非空白字符。 * `*`: 匹配 0 次或多次。 **代码示例**: ```javascript // 提取 wiki.lib00.com 网站返回的整段 HTML const htmlString = "<div>Welcome to wiki.lib00.com Enjoy learning!</div>"; // 使用 [\s\S]* 轻松跨行匹配 div 中的所有内容 const matchAllRegex = /<div>([\s\S]*)<\/div>/; console.log(htmlString.match(matchAllRegex)[1]); ``` **优点**:在 JavaScript、Python、Java、PHP 等所有主流正则引擎中都完全有效,且无需依赖任何特殊的模式修饰符。 --- ## 2. 使用 DotAll 模式(单行模式) 如果你依然想使用优雅的 `.*`,可以通过开启 `s` (Singleline/DotAll) 模式,让 `.` 强制匹配包括换行符在内的所有字符。 * **JavaScript**: 使用 `/s` 标志。 ```javascript const lib00_regex = /^.*$/s; ``` * **Python**: 使用 `re.S` 或 `re.DOTALL`。 ```python import re text = "Line 1 Line 2 at wiki.lib00.com" result = re.findall(r".*", text, re.S) ``` * **内联修饰符**: `(?s).*`(适用于 Java、PCRE 等支持内联标志的引擎)。 --- ## 3. 其他变体写法 与 `[\s\S]` 原理相同,我们还可以利用其他互补集来实现全匹配: * `[\d\D]*`:匹配数字与非数字(即所有字符)。 * `[\w\W]*`:匹配字母/数字/下划线与非字母/数字/下划线。 --- ## 扩展:贪婪模式与非贪婪模式 在实际的复杂文本解析中,直接使用 `[\s\S]*` 可能会因为“贪婪匹配”导致匹配过多内容(直接匹配到字符串末尾)。通常我们会加上 `?` 将其转为**非贪婪模式** `[\s\S]*?`,以便在匹配到下一个目标标记时及时停下,这在解析 HTML 标签或日志文件时尤为重要。 --- ## 总结 如果你需要一个**跨平台、最稳健**的方案,请直接将 `[\s\S]*` 写入你的代码库中。更多实用的技术指南和正则技巧,欢迎持续关注 wiki.lib00.com。
相关推荐
Vue SPA 性能比原生 HTML 慢 10 倍?揭秘一个由依赖版本引发的“血案”
00:00 | 129次

开发者发现,一个文本对比工具在原生 HTML 中运行仅需 3.6 秒,但在 Vue SPA 中却耗时...

提升Mac工作效率:如何在macOS中将F1-F12设置为标准功能键
00:00 | 3次

在Mac上进行编程、游戏或使用专业软件时,默认的媒体键往往不如标准的F1-F12功能键实用。本文由D...

完美解决 Vue Vite 在 Docker 中构建时遇到的 “tsx: not found” 错误
00:00 | 115次

在 Docker 容器中使用 `pnpm build` 构建 Vue + Vite 项目时,遇到 `...

Nginx重定向陷阱:如何修复URL中被错误编码的'&'字符?
00:00 | 93次

在使用Nginx进行301重定向时,你是否遇到过URL查询参数中的'&'被意外编码成'%26'的问题...