正则表达式入门

发布于:2025-06-14 ⋅ 阅读:(17) ⋅ 点赞:(0)

在日常开发中,我们经常需要处理字符串,比如验证邮箱、手机号、提取数据、替换内容等。这时候,正则表达式(Regular Expression, 简称 Regex) 就是一个非常强大的工具。

本文将带你从零了解正则表达式的基本语法、常见用法,并配合示例逐步讲解其强大功能。


一、什么是正则表达式?

正则表达式是一种用于匹配字符串中某些内容的模式(Pattern)。它像一种精密的“搜索规则”,可以快速在文本中查找、验证或替换符合要求的部分。


二、正则表达式的基础语法

1. 字面字符

最简单的正则就是直接匹配具体字符:

hello     # 匹配“hello”字符串
123       # 匹配“123”

2. 元字符(Metacharacters)

元字符有特殊意义,用于定义复杂规则:

字符 含义 示例
. 匹配任意一个字符(除换行) a.b 可匹配 acb
^ 匹配开头 ^abc 匹配以 abc 开头
$ 匹配结尾 abc$ 匹配以 abc 结尾
* 匹配前面的字符 0 次或多次 ab*c 匹配 ac, abc, abbc
+ 匹配前面的字符 1 次或多次 ab+c 匹配 abc, abbc
? 匹配 0 或 1 次 ab?c 匹配 acabc
[] 匹配括号中任意一个字符 [abc] 匹配 a, b, 或 c
` ` 或(或逻辑)
() 分组与捕获 (abc)+ 匹配重复的 abc

3. 常见转义字符

表达式 含义 示例
\d 数字,等价于 [0-9] \d+ 匹配一个或多个数字
\w 单词字符 [a-zA-Z0-9_] \w+ 匹配单词
\s 空白字符(空格、Tab) \s+ 匹配空格
\b 单词边界 \bword\b 精确匹配 word
\D 非数字字符
\W 非单词字符
\S 非空白字符
\\ 匹配反斜杠 \

三、常见正则表达式例子

1. 验证邮箱地址

^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$
  1. ^:表示匹配字符串的开头(确保邮箱前没有其他字符)。

  2. [a-zA-Z0-9_.+-]+

    • 用户名部分:匹配邮箱 @ 前的部分。
    • 允许的字符: 字母(a-z, A-Z) 、数字(0-9)、特殊字符(_ . + -
    • + 表示至少出现1次(不能为空)。
  3. @ :中间的 @ 符号。

  4. [a-zA-Z0-9-]+

    • 域名部分:如 gmailyahoo 等。
    • 允许的字符:字母、数字、连字符 -(但不能以 - 开头或结尾,此处正则未严格限制)。
  5. \. :匹配一个点号.),需转义为 \.(因为 . 在正则中默认匹配任意字符)。

  6. [a-zA-Z0-9-.]+

    • 顶级域名(TLD):如 comco.uk 等。
    • 允许的字符:字母、数字、点号 . 和连字符 -(可支持多级域名,如 ac.jp)。
  7. $ :表示匹配字符串的结尾(确保邮箱后没有其他字符)。

能匹配的示例:

  • user.name+123@gmail.com
  • abc@example.co.jp
  • test-email@sub.domain.org

2. 验证手机号(中国)

^1[3-9]\d{9}$
  • 1 开头
  • 第二位是 3-9
  • 接着是 9 位数字

3. 匹配 HTML 标签

<[^>]+>

匹配形如 <div><img src="x.jpg"> 的 HTML 标签


4. 提取日期(YYYY-MM-DD)

\d{4}-\d{2}-\d{2}

匹配形如 2025-06-11 的日期格式


5. 匹配 IPv4 地址

\b(?:\d{1,3}\.){3}\d{1,3}\b

匹配像 192.168.1.1 这样的 IP 地址


四、正则在编程语言中的使用示例

Python 示例:

import re

text = "My email is test@example.com"
pattern = r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+'
match = re.search(pattern, text)

if match:
    print("Found:", match.group())

JavaScript 示例:

const text = "Today is 2025-06-11"
const match = text.match(/\d{4}-\d{2}-\d{2}/)
console.log(match[0])  // 输出:2025-06-11

五、正则调试与测试工具推荐

  1. Regex101(支持解释和测试)
  2. RegExr(界面友好,支持语法提示)
  3. VS Code + 正则搜索:查找 / 替换神器
  4. Python 的 re 模块、JavaScript 的 RegExp 对象等

六、正则表达式进阶小技巧

  • 使用 非捕获分组(?:...),不存储匹配结果
  • 使用 懒惰匹配*?+?,防止贪婪匹配太多内容
  • 使用 命名分组(如 Python):(?P<name>...)
  • 避免过于复杂的正则,适当使用普通字符串操作更清晰

七、常见坑与注意事项

  • 正则容易写出“看得懂但不好维护”的代码,建议搭配注释或分组。
  • 某些语言或平台(如 JavaScript)对 Unicode 字符处理不一致,要小心中文匹配。
  • 避免用正则解析复杂的 HTML/XML(推荐用解析器如 BeautifulSoup)。

八、总结

正则表达式是一种强大的文本处理工具,掌握它可以极大提高处理文本数据的效率。虽然刚开始有些复杂,但随着练习和实际使用,你会越来越得心应手。

📌 建议从以下几种常用场景入手练习:

  • 验证用户输入(邮箱、手机号、密码)
  • 批量替换文本内容
  • 提取网页数据或日志信息
  • 匹配文件名、路径、日期等格式

📚 推荐阅读

  • 《正则表达式必知必会》
  • 《精通正则表达式》(Mastering Regular Expressions)
  • Python 官方文档:re 模块
  • JavaScript MDN 文档:RegExp

网站公告

今日签到

点亮在社区的每一天
去签到