终极指南:如何使用正则表达式匹配所有内容(包含换行符)
内容
在日常开发中,我们经常需要使用正则表达式来提取或匹配大段多行文本。很多新手会直觉地使用 `.*`,却发现它无法跨行匹配。这是因为在大多数正则引擎中,点号 `.` 默认是不匹配换行符(`
` 或 `\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。
关联内容
正则表达式新手终极指南:从零到一掌握文本匹配利器
时长: 00:00 | DP | 2025-12-02 20:47:30PHP 正则替换优化:如何将多个 preg_replace 合并为一行?
时长: 00:00 | DP | 2026-01-21 08:24:30PhpStorm书签快捷键之谜:F11还是F3?终极解答!
时长: 00:00 | DP | 2026-02-07 10:58:25Nginx 301重定向:如何优雅移除URL末尾多余的问号?
时长: 00:00 | DP | 2026-02-25 17:18:22相关推荐
正则表达式新手终极指南:从零到一掌握文本匹配利器
00:00 | 116次还在为复杂的文本匹配和数据提取而烦恼吗?本文是专为新手设计的正则表达式(Regex)终极指南。我们将...
解密 macOS 上的 `realpath: command not found` 及其连锁错误
00:00 | 167次在 macOS 上运行脚本时遇到 `realpath: command not found` 错误?...
揭秘 SQLite 数据库文件:.sqlite、-wal 与 -shm 的核心关系
00:00 | 63次在查看 SQLite 数据库目录时,常会发现除主文件外,还有 -wal 和 -shm 后缀的文件。本...
Composer 脚本不执行?解密 `post-install-cmd` 的陷阱与终极解决方案
00:00 | 125次你是否遇到过 `composer install` 后,定义在 `post-install-cmd`...