语法:
(?#这里写注释文字)
- 属于扩展分组语法,引擎直接忽略括号内部全部文字,完全不参与匹配,只给人阅读看。
- 不会捕获内容、不产生分组编号、不能反向引用。
示例1,IP分段加上注释
2[0-4]\d(?#200‑249)|25[0‑5](?#250‑255)|[01]?\d\d?(?#0‑199)
Code language: PHP (php)
(?#200‑249):注释,告诉阅读者这一段匹配200~249,正则执行直接跳过这段文字。- 整个正则匹配逻辑完全不变,可读性大幅提升。
示例2,给零宽断言例子加注释
\b\w+(?=ing\b)(?#匹配ing结尾单词,结果不含ing)
Code language: PHP (php)
(?#匹配ing结尾单词,结果不含ing) 仅作为备注,不影响匹配。
另一种注释方式
VERBOSE模式(x标志 / (?x))
开启verbose模式后,正则里面普通空格会被忽略,用 # 做行注释:
(?:
2[0‑4]\d # 200‑249
|25[0‑5] # 250‑255
|[01]?\d\d? # 0‑199
)
Code language: PHP (php)
Previous: 零宽断言 & 负向零宽断言
Next: 贪婪匹配 vs 懒惰(非贪婪)匹配