正则表达式介绍

正则表达式(Regular Expressions)入门与实践


正则表达式是一种用来匹配字符串的强大语法规则集合,广泛应用于文本搜索、数据清洗、日志分析及 Web 开发等场景。

什么是正则表达式

正则表达式(Regular Expression,简称 regexregexp)是一种描述字符模式的语法,用于在文本中搜索、提取、替换符合特定模式的子串。几乎所有现代编程语言(如 Python、JavaScript、Java、Go)及命令行工具(如 grepsed)都内置或支持正则引擎。

基本语法元素

元字符说明示例
.匹配除换行符以外的任意单个字符a.c 可匹配 abcaxc
\\转义下一个字符\\. 仅匹配句点本身
*匹配前一个表达式 0 次或多次lo*l 可匹配 lllollool
+匹配前一个表达式 1 次或多次lo+l 可匹配 lollool
?匹配前一个表达式 0 次或 1 次;在量词后表示非贪婪模式colou?r 可匹配 colorcolour
``逻辑“或”`catdog可匹配catdog`
()分组与捕获(abc)+ 重复匹配 abc 片段
[]定义字符集合[A-Z] 匹配任一大写字母

字符集合与转义

  • 范围[0-9] 表示任意数字。

  • 排除[^aeiou] 匹配任何非元音字符。

  • 简写字符类(以 PCRE/JavaScript 语法为例):

    • \\d[0-9](数字)
    • \\w[A-Za-z0-9_](单词字符)
    • \\s ↔ 空白字符(含空格、制表符、换行)
    • 对应的大写如 \\D\\W\\S 表示取反

提示:在字符类 [] 内只有 -, ^, ], \\ 需要转义;在类外,诸多元字符(如 .*?+)均须转义才能表达字面含义。

量词 (Quantifiers)

语法描述贪婪 vs. 非贪婪
*0 次或多次.* vs. .*?
+1 次或多次.+ vs. .+?
?0 或 1 次.? vs. .?
{n}恰好 n 次\\d{4} 匹配四位数字年份
{n,}至少 n 次\\d{2,} 匹配 2 位以上数字
{n,m}n–m 次\\d{1,3} 匹配 1–3 位数字

锚点 (Anchors)

  • ^:匹配字符串开始
  • $:匹配字符串结束
  • \\b:单词边界;\\B:非单词边界

示例:

^\\d{4}-\\d{2}-\\d{2}$

匹配完整的 ISO 日期格式 YYYY-MM-DD

分组与引用

  • 捕获组(), 可通过 \\1, \\2 引用
  • 非捕获组(?:...), 减少内存开销
  • 命名组(部分语言支持):(?P<year>\\d{4})

示例(Python):

import re
pattern = re.compile(r"(\\b\\w+) \\1")
print(pattern.findall("bye bye see you"))  # ['bye']

常见示例

# 1. 邮箱地址(简化版)
^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$

# 2. IPv4
^(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)(?:\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3}$

# 3. 中国手机号
^1[3-9]\\d{9}$

高级特性

  • 前瞻/后顾(Lookahead/Lookbehind):(?=...), (?!...), (?<=...), (?<!...)
  • 条件判断(?(<name>)yes|no)(PCRE)
  • 嵌入式修饰符(?i) 大小写不敏感
  • Unicode 属性\\p{Han} 匹配中文字符

常用工具与资源

工具/网站用途
regex101交互式调试,支持多种方言
RegExr可视化解释与社区示例
grep, sed, awkUnix 文本处理三剑客
ripgrepRust 实现的极速搜索
VSCode / Sublime Text编辑器自带正则搜索替换

参考资料

  1. Jeffrey Friedl. Mastering Regular Expressions, 3rd ed., O’Reilly Media, 2006.
  2. Russ Cox. Regular Expression Matching Can Be Simple And Fast (but is slow in Java, Perl, PHP, Python, Ruby, …), 2010.
  3. Python re 官方文档:https://docs.python.org/3/library/re.html
  4. MDN Web Docs: Regular expressions.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值