欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 正则表达式入门

正则表达式入门

2025/9/26 21:00:11 来源:https://blog.csdn.net/m0_73419365/article/details/148597542  浏览:    关键词:正则表达式入门

在日常开发中,我们经常需要处理字符串,比如验证邮箱、手机号、提取数据、替换内容等。这时候,正则表达式(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 retext = "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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词