跳到主要内容
FreeOnlineTools Go
简体中文
解释

什么是正则表达式?完整说明

作者:FreeOnlineTools Team · 更新日期:2026-09-02

快速解答

正则表达式是描述一组字符串的模式。它使用文字字符(匹配自身)和具有特殊含义的元字符(*、+、?、.、^、$、[]、()、{}、|、\)。正则表达式用于验证、搜索、提取和替换。使用我们的免费正则表达式测试器根据浏览器中的文本测试模式。

介绍

正则表达式(regex 或 regexp)是定义搜索模式的字符序列。字符串搜索算法使用该模式来查找、匹配或替换文本。正则表达式起源于 20 世纪 50 年代的形式语言理论(Stephen Kleene),并在 1970 年代被采用到 Unix 文本工具(grep、sed、awk)中。如今,正则表达式几乎内置于所有编程语言和文本编辑器中。正则表达式功能强大——它可以验证电子邮件格式、从日志中提取数据并查找复杂的模式——但语法很密集并且非常难以阅读。

步步

  1. 理解文字和元字符

    文字字符(a、b、1、@)与其自身匹配。元字符具有特殊含义: .匹配任何字符,* 表示零个或多个,+ 表示一个或多个,?表示零或一,^ 匹配开始,$ 匹配结束。

  2. 学习角色类别

    方括号 [] 定义字符类 - [aeiou] 匹配任何元音,[0-9] 匹配任何数字,[^0-9] 匹配任何非数字。速记类:\d(数字)、\w(单词字符)、\s(空格)及其大写否定。

  3. 使用量词

    量词指定模式重复的次数:* (0+)、+ (1+)、? (0 或 1)、{n}(恰好是 n)、{n,}(n+)、{n,m}(n 到 m)。默认贪婪;添加 ?用于惰性匹配(例如,*?)。

  4. 群组和主播

    括号 () 创建捕获组。交替|匹配任一侧 (cat|dog)。锚点 ^ 和 $ 匹配字符串的开头和结尾。使用它们从简单的模式构建复杂的模式。

示例

匹配类似电子邮件的模式

输入: Pattern: [a-z]+@[a-z]+\.[a-z]+

输出: 匹配:[email protected]、[email protected]

匹配电话号码格式

输入: Pattern: \d{3}-\d{3}-\d{4}

输出: Matches: 555-123-4567

提取键值对

输入: Pattern: (\w+)=(\w+)

输出: Matches 'key=value' with group 1 as key, group 2 as value

常见问题

  • 贪婪匹配会过度消耗 —.* 尽可能多的匹配。使用 。*?用于惰性匹配以找到最短匹配。
  • 忘记转义特殊字符 —.、*、+、? 等都是特殊字符。使用 \ 按字面匹配它们(例如,\. 匹配字面点)。
  • 灾难性回溯——具有嵌套量词的模式(例如,(a+)+)可能会在某些输入上花费指数时间,从而导致 ReDoS 攻击。
  • 过度匹配——没有锚点(^ 和 $),模式可以匹配任何地方。使用 ^...$ 匹配整个字符串。

提示

  • 从简单开始,逐渐增加复杂性——一次性调试一个复杂的正则表达式非常困难。
  • 使用正则表达式测试器根据示例文本试验模式 - 查看实时突出显示的匹配项。
  • 使用扩展模式(某些引擎中的 /x 标志)注释复杂的正则表达式或将它们分解为命名部分。
  • 使用我们的正则表达式测试器在浏览器中立即测试模式 - 无需注册,完全私密。

相关工具

相关指南

参考