学习笔记-正则表达式 - 语法

正则表达式语法学习笔记(精简版)


一、基础元字符

元字符描述
.匹配任意单个字符(除换行符外)
\转义字符,用于匹配特殊字符本身(如 \. 匹配 .
*匹配前一个字符/子表达式 0次或多次
+匹配前一个字符/子表达式 1次或多次
?匹配前一个字符/子表达式 0次或1次

二、字符类

  1. 普通字符组

    • [abc]: 匹配 abc 中的任意一个字符。
    • [a-z]: 匹配小写字母 a 到 z 中的任意一个字符。
  2. 排除型字符组

    • [^0-9]: 匹配非数字字符。
  3. 预定义字符类

    • \d: 匹配数字(等价于 [0-9])。
    • \w: 匹配单词字符(字母、数字、下划线,等价于 [a-zA-Z0-9_])。
    • \s: 匹配空白字符(空格、制表符、换行符等)。

三、量词

量词描述示例
{n}精确匹配 n 次a{3}aaa
{n,}至少匹配 n 次\d{2,} → 两位及以上数字
{n,m}匹配 n 到 m 次a{2,4}aa, aaa, aaaa
贪婪模式默认尽可能多匹配(如 .*
非贪婪模式在量词后加 ?(如 .*?

四、分组与捕获

  1. 分组

    • (exp): 将子表达式 exp 分组,可用于逻辑操作或量词控制。
    • 示例:(ab)+ababab
  2. 捕获与非捕获

    • 默认分组为捕获组(存储匹配结果)。
    • 非捕获组:(?:exp)(仅分组,不捕获)。
  3. 反向引用

    • 使用 \1, \2 等引用分组内容。
    • 示例:(\w+)\s+\1 → 匹配重复单词(如 hello hello)。

五、边界匹配

符号描述示例
^匹配字符串开始^Hello → 以 Hello 开头
$匹配字符串结束world$ → 以 world 结尾
\b匹配单词边界\bcat\b → 匹配独立单词 "cat"

六、选择结构

  • |: 逻辑“或”操作。
    • 示例:cat|dog → 匹配 catdog

七、修饰符(Flags)

修饰符描述常见语言支持
i不区分大小写JavaScript/Python/Java
g全局匹配(查找所有结果)JavaScript
m多行模式(^$ 匹配每行的首尾)Python/JavaScript

八、应用场景示例

  1. 邮箱验证

    regex
    复制代码
    ^[\w.-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,4}$
  2. 提取电话号码

    regex
    复制代码
    (\d{3})-(\d{8}) # 匹配格式如 010-12345678
  3. HTML标签过滤

    regex
    复制代码
    <[^>]+> # 匹配所有HTML标签

九、注意事项

  1. 性能优化

    • 避免过度使用贪婪量词(如 .*),防止回溯爆炸。
  2. 可读性

    • 复杂正则可拆分为多行并添加注释(部分语言支持)。
  3. 兼容性

    • 不同编程语言的正则实现可能略有差异(如修饰符名称)。

工具推荐:使用 Regex101RegExr 在线测试正则表达式。

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP