终极指南:如何使用正则表达式匹配所有内容(包含换行符)
内容
在日常开发中,我们经常需要使用正则表达式来提取或匹配大段多行文本。很多新手会直觉地使用 `.*`,却发现它无法跨行匹配。这是因为在大多数正则引擎中,点号 `.` 默认是不匹配换行符(`
` 或 `\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相关推荐
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'的问题...