返回顶部
R

Regex正则表达式

Write correct, efficient regular expressions across different engines.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.0
安全检测
已通过
1,164
下载量
免费
免费
2
收藏
概述
安装方式
版本历史

Regex

贪婪 vs 懒惰

转义

  • - 元字符需要转义:\. \* \+ \? \[ \] \( \) \{ \} \| \\ \^ \$
  • 在字符类 [] 内部:只有 ]、\、^、- 需要转义(且 ^ 仅在开头,- 仅在中间)
  • 字面反斜杠:正则中用 \\,但在字符串中通常需要 \\\\(双重转义)

锚点

  • - ^ 表示开头,$ 表示结尾——但行为会随多行标志改变
  • 多行模式:^ $ 匹配行首/行尾;非多行模式仅匹配字符串首尾
  • \A 始终匹配字符串开头,\Z 始终匹配字符串结尾(并非所有引擎支持)
  • 单词边界 \b 匹配位置而非字符——\bword\b 用于匹配完整单词

字符类

  • - [abc] 匹配 a、b、c 中的任意一个;[^abc] 匹配除 a、b、c 外的任意字符
  • 范围:[a-z] [0-9]——但 [a-Z] 无效(ASCII 顺序决定)
  • 简写:\d 数字、\w 单词字符、\s 空白字符;大写表示否定:\D \W \S
  • . 匹配除换行符外的任意字符——使用 [\s\S] 匹配真正任意字符,或使用 s 标志(如支持)

分组

  • - 捕获分组 () 与非捕获分组 (?:)——不需要反向引用时使用 (?:)
  • 命名分组:(?...) 或 (?P...)(取决于引擎)
  • 反向引用:\1 \2 引用同一模式中的捕获分组
  • 分组也建立分支作用域:cat|dog 与 ca(t|d)og

前瞻与后顾

  • - 正向前瞻 (?=...):断言后面是什么,但不消耗字符
  • 负向前瞻 (?!...):断言后面不是什么
  • 正向后顾 (?<=...):断言前面是什么
  • 负向后顾 (?
  • 大多数引擎中后顾必须是固定宽度——内部不能使用 * 或 +

标志

  • - i 不区分大小写、m 多行模式(^$ 匹配行)、g 全局匹配(查找所有)
  • s(点号通配模式):. 匹配换行符——并非所有环境支持
  • u Unicode:启用 \p{} 属性、正确处理代理对
  • 标志语法各异:/pattern/flags(JavaScript)、(?flags) 内联标志、或函数参数(Python re.I)

引擎差异

  • - JavaScript:ES2018 前不支持后顾;无 \A \Z;无占有量词
  • Python re:使用 (?P) 命名分组;无 regex 模块时不支持 \p{}
  • PCRE(PHP、grep -P):功能完整;支持占有量词 ++ *+;支持递归模式
  • Go:RE2 引擎,不支持反向引用和前瞻——保证线性时间

性能

  • - 灾难性回溯:(a+)+ 对 aaaaaaaaaab 呈指数级增长——避免嵌套量词
  • 占有量词 ++ *+ 阻止回溯——在回溯无意义时使用
  • 原子分组 (?>...) 不释放已匹配字符——类似占有量词
  • 尽可能锚定模式——^prefix 是 O(1),未锚定的 prefix 是 O(n)

常见错误

  • - 邮箱验证:符合 RFC 规范的正则表达式超过 6000 字符——使用简单检查或库函数
  • URL 匹配:边界情况无穷无尽——使用 URL 解析器,正则仅用于快速提取
  • 不要用正则处理 HTML/XML——使用解析器;正则无法处理嵌套结构
  • 忘记转义用户输入——正则注入真实存在;使用字面转义函数

测试

  • - 测试边界情况:空字符串、特殊字符、Unicode、超长输入
  • 使用工具可视化:regex101.com 显示匹配结果并解释
  • 确认你阅读的是哪个引擎的文档——功能差异显著

标签

skill ai
v1.0.0 最新 2026-4-17 15:03
Initial release

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部