正则 Flags 详解 - i/g/m/s/u/y/d 分别是什么意思
589 字
3 分钟
正则 Flags 详解 - i/g/m/s/u/y/d 分别是什么意思
🌟 Flags 是正则的”开关”
同一段正则,加上不同的 Flags,行为会完全不同。最常见的”忘了加 g,只匹配到第一处”就是 Flags 问题。星点正则测试器提供可点选的 Flags。
🚩 逐个解释
| Flag | 名称 | 作用 |
|---|---|---|
g | global | 全局匹配,找所有结果 |
i | ignoreCase | 忽略大小写 |
m | multiline | ^ $ 匹配每行首尾 |
s | dotAll | . 也能匹配换行 |
u | unicode | 按 Unicode 处理(码点) |
y | sticky | 从 lastIndex 严格匹配 |
d | indices | 结果带匹配位置索引 |
🔍 逐个场景
g 全局
不加 g,match 只返回第一个匹配。要”找出全部”,必须加 g。
i 忽略大小写
hello 加 i 后能匹配 Hello、HELLO。
m 多行
不加 m,^ 只匹配整段开头。开启后,^ $ 对每一行生效。
s DotAll
默认 . 不匹配换行;开启 s 后 . 可跨行。等价写法:[\s\S]。
u Unicode
处理 emoji、生僻字、代理对时更准确。例如 . 在 u 模式下按码点匹配,而不是按 UTF-16 单元。
y 粘性
从 lastIndex 开始严格匹配(不跳过中间字符),适合逐段解析。
d 索引
匹配结果附带 indices,可直接拿到每个捕获组的起止位置。
🌐 各语言 Flags 写法
| 语言 | 忽略大小写 | 多行 | DotAll |
|---|---|---|---|
| JavaScript | i | m | s |
| Python | re.I | re.M | re.S |
| Java | Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL |
| C# | RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline |
| PHP | i(分隔符后) | m | s |
注意 C# 的 DotAll 叫
Singleline,命名与直觉相反。
⚠️ 常见坑
- 忘
g:以为”没匹配到”,其实只取了第一处; g+test():带g的正则对象有lastIndex状态,连续调用会跳着匹配;.跨行:忘了开s,跨行匹配失败;- 多行锚点:忘了
m,^$只匹配整段首尾。
🔧 常见问题
Flags 可以组合吗?
可以,如 `gi` 表示全局 + 忽略大小写。为什么同一个正则第二次匹配结果不对?
多半是带 `g` 的正则对象 `lastIndex` 未重置。新建正则对象或重置 `lastIndex` 即可。各语言 Flags 通用吗?
语义类似但写法不同,迁移时用[多语言引擎](https://www.xingdian.net/app/regex/engines/)核对。💬 总结
最常用的三个:g(全局)、i(忽略大小写)、m(多行)。跨行还要 s。理解 Flags,能避免一大半”正则不工作”的问题。
立即体验:访问 正则测试器
相关资源
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
最后更新于 2026-09-13,距今已过 32 天
部分内容可能已过时
相关文章 智能推荐
1
正则前瞻与后顾怎么用 - 断言语法详解与实例
正则工具 正则的前瞻(lookahead)与后顾(lookbehind)断言怎么用?本文用密码校验、金额、排除条件等实例,讲清正向/负向、前/后四种断言,并说明各语言兼容性差异。附在线正则测试工具。
2
ReDoS 是什么 - 正则表达式灾难性回溯与检测方法
正则工具 ReDoS(正则表达式拒绝服务)源于灾难性回溯。本文解释哪些正则结构会指数级变慢、为什么 (a+)+ 这类写法危险、如何检测与修复,并给出各引擎差异与实战建议。附在线 ReDoS 检测工具。
3
正则表达式语法速查表 - 元字符/量词/断言/Flags 大全
正则工具 正则表达式语法速查:元字符、字符类、量词、分组、断言、边界、转义与 Flags 一览,含含义与示例,适合随时查阅。附在线正则速查与测试工具。
4
正则匹配中文怎么写 - 汉字/中文标点匹配方法
正则工具 正则怎么匹配中文?本文给出汉字范围 [\u4e00-\u9fa5] 与 Unicode 属性 \p{Script=Han} 两种写法,说明中文标点、全角字符、长度统计的注意点。附在线正则测试工具。
5
Python 和 Java 正则怎么写 - 跨语言正则语法对照
正则工具 Python 和 Java 正则写法对照:原始字符串、命名捕获组、Flags、反向引用、前瞻后顾的差异,附代码示例。帮你把正则正确迁移到目标语言。在线多语言正则工具。
随机文章 随机推荐