当前位置: 首页 > web >正文

正则表达式入门

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

相关文章:

  • 【AIGC】Qwen3-Embedding:Embedding与Rerank模型新标杆
  • 【狂飙AGI】第2课:大模型方向市场分析
  • # Flask:Python的轻量级Web框架入门之旅(超级实用!)
  • 测试过程中有哪些风险?
  • KU115LPE-V10型FPGA加速卡
  • Linux操作系统之文件系统下
  • 友思特方案 | 友思特车载双目相机技术赋能农业:Monarch 智能拖拉机解决方案
  • linux基础day01
  • [25-cv-06422]David律所代理Dreams USA玩具手办商标维权
  • Java日期格式化
  • Swift 解法详解:如何在二叉树中寻找最长连续序列
  • NAS文件共享、PACS影像存储,速率提升400%?
  • PostgreSQL认证怎么选?PGCP中级认证、PGCM高级认证
  • 基于 Redis 的幂等性设计:SpringBoot @Async 在高并发 MySQL 日志存储中的应用
  • Vue3+TypeScript实现迭代器模式
  • FOC电机三环控制
  • aws s3 sdk c++使用指南、适配阿里云oss和aws
  • 「Java EE开发指南」如何用MyEclipse创建一个WEB项目?(一)
  • DDcGAN_codes
  • 【python】执行deactivate没有关闭虚拟环境
  • 交易所 java, web3 交易所简易模块
  • [SKE]CPU 与 GPU 之间数据加密传输的认证与异常处理
  • 【线程与线程池】线程数设置(四)
  • 线程池启动报null :Caused by: java.lang.IllegalArgumentException: null
  • 每日学习一道数模题-2024国赛B题-生产过程中的决策问题
  • ViT架构所需的大型训练集
  • 在 IntelliJ IDEA 中运行时出现“Log already in use? tmlog in ./“
  • Python数据可视化艺术:社交网络关系图制作
  • parquet批量读取图片文件示例
  • 树莓派5 ubuntu 24.04 docker配置镜像Docker pull时报错:https://registry-1.docker.io/v2/