适合初学者的正则表达式:让模式匹配变得简单

正则表达式 (regex) 是每种主要编程语言都支持的模式匹配语言。掌握 15-20 个核心概念后,您可以编写用于电子邮件验证、URL 提取、电话号码格式化和数据清理的正则表达式。

Regular expression pattern diagram with labeled components and match highlighting

什么是正则表达式?

正则表达式(regex 或 regexp)是定义搜索模式的字符序列。它们几乎内置于每种编程语言中,并用于:

  • 验证:此字符串是否与有效电子邮件地址的模式匹配?
  • 搜索:查找这 10,000 个单词中的所有电话号码文档。
  • 替换:将所有出现的“color”替换为“color”。
  • 提取:从块中提取所有网址HTML。
  • 分割:以逗号分割字符串,但不在引号内分割逗号。

核心元字符及其匹配内容

Regular expression metacharacters and quantifiers quick reference cheatsheet

角色匹配示例
。任意除换行符外的单个字符c.t 匹配“cat”、“cot”、 "cut"
d任意数字(0–9)ddd 匹配"123"
w单词字符(A-Z、a-z、0-9、 _)w+ 匹配"hello_world"
s空白(空格、制表符、 newline)s+ 匹配任何空白
D 非数字D+匹配“hello”
W非单词字符W 与“!”匹配或","
S非空白

转义: 要匹配文字元字符,请使用 \ 进行转义。要匹配文字 .,请使用 \.


量词:重复模式

Regex flags comparison showing global g, case-insensitive i, and multiline m flags

量词含义示例
*0或更多(贪婪)ab*c 匹配“ac”、“abc”, "abbc"
+1 或更多(贪婪)ab+c 匹配“abc”、“abbc”,但不匹配“ac”
?0 或 1 (可选)colou?r 匹配“颜色”并且"颜色"
{n}正好 n timesd{4} 正好匹配 4数字
{n,m}n 和 m 之间timesd{3,5} 匹配 3、4 或 5数字
*?0 或更多(惰性)匹配可能
+?1个或更多(惰性)匹配最少可能

角色类和锚点

Regex capture group extraction breakdown showing isolated substring matching

字符类别 [...]: 匹配一组字符中的任意一个字符。

  • [aeiou] — 匹配任何元音
  • [A-Z] — 任何大写字母letter
  • [0-9] — 任何数字(与d)
  • [^aeiou] - 任何不是元音的字符(否定)

锚点: 匹配位置,而不是字符。

  • ^ — 匹配字符串的开头
  • $ — 匹配字符串的结尾string
  • — 匹配字边界

实用正则表达式:电子邮件、电话、网址模式

ToolDolfen in-browser regular expression tester and debugger pipeline

Five essential production regex patterns for email, date, URL, and phone numbers

基本电子邮件验证:

^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$

美国电话号码(多种格式):

^(\+1)?[\s.-]?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$

从文本中提取网址:

https?:\/\/[\w\-]+(\.[\w\-]+)+[/#?]?[\w\-._~:/?#[\]@!$&'()*+,;=%]*

使用免费的客户端 正则表达式在线测试 (Regex Tester) 实时测试和调试所有这些模式,并具有即时匹配突出显示功能。

推荐配套指南

从此主题组中探索补充教程和实用程序,以增强您的数字工作流程:

了解 EXIF 数据:照片揭示的有关相机、时间和位置的信息采用经过验证的标准和浏览器内的实用分步教程终极照片隐私指南:在共享之前剥离 GPS 和 EXIF 元数据具有经过验证的标准和浏览器内的实用分步教程工作流程。如何为照片添加水印以保护版权:文本和徽标叠加经过验证的标准和浏览器内的实用分步教程工作流程。如何在不损失质量的情况下在线压缩图像连接相关数据和媒体工具的补充跨格式工作流程。
推荐实用程序:Regex Tester在浏览器中实时执行此工作流程,服务器上传量为零,客户端隐私为 100%。
正则表达式在线测试 (Regex Tester)
正则表达式在线测试 (Regex Tester)

常见问题解答 (FAQ)

查看关于此操作流程常见问题的快速与权威解答。

所有编程语言中的正则表达式都相同吗?

核心语法很大程度上是标准化的(基于 Perl 兼容的正则表达式 PCRE),但在边缘情况下实现有所不同。 JavaScript、Python、Ruby 和 PHP 非常相似。 JavaScript 在旧引擎中缺乏lookbehind 支持; Python 使用 (?P<name>...) 来表示命名组;可用的标志因语言而异。

正则表达式默认区分大小写吗?

是的,正则表达式默认区分大小写。要启用不区分大小写的匹配,请使用 i 标志:JavaScript 中的 /pattern/i、Python 中的 re.IGNORECASE 或 SQL 中带有不区分大小写排序规则的 REGEXP_REPLACE。

贪婪量词和惰性量词有什么区别?

贪婪量词 (* + ?) 尽可能多地匹配,同时仍允许整体模式匹配。惰性量词 (*? +??) 尽可能少地匹配。示例:对于文本“<b>粗体</b>”,<.*> 匹配整个字符串(贪婪),而 <.*?> 仅匹配“<b>”(惰性)。

Bilal Ahmad