返回列表
正则表达式基础教程
自由客七维 2026-03-18 19:13 53

什么是正则表达式?

正则表达式(Regular Expression,简称 regex 或 regexp)是一种用于描述字符串匹配模式的表达式。它由一系列普通字符和元字符组成,可以用来检索、替换、提取符合某种规则的文本。几乎所有的编程语言(如 JavaScript、Python、Java、PHP)和文本编辑器都支持正则表达式。

为什么需要正则表达式?

  • 文本搜索:快速查找符合特定模式的字符串,例如在一篇文章中找出所有邮箱地址。
  • 数据验证:验证用户输入是否合法,如手机号、身份证号、密码强度等。
  • 文本替换:批量替换符合模式的文本,如将日期格式从 yyyy-mm-dd 转换为 dd/mm/yyyy。
  • 字符串提取:从复杂文本中提取需要的信息,如日志文件中提取 IP 地址。

正则表达式基本语法

1. 普通字符

大多数字符(如字母、数字)在正则表达式中就是它们本身,例如正则 abc 可以匹配字符串中的连续字符 "abc"。

2. 元字符

元字符是具有特殊含义的字符,常用元字符如下:

元字符描述示例
.匹配除换行符以外的任意单个字符a.c 可匹配 "abc"、"aac"、"a1c"
^匹配字符串的开始位置^abc 匹配以 "abc" 开头的字符串
$匹配字符串的结束位置abc$ 匹配以 "abc" 结尾的字符串
*匹配前面的子表达式零次或多次ab*c 可匹配 "ac"、"abc"、"abbc"
+匹配前面的子表达式一次或多次ab+c 可匹配 "abc"、"abbc",但不能匹配 "ac"
?匹配前面的子表达式零次或一次ab?c 可匹配 "ac"、"abc"
{n}匹配确定的 n 次a{3} 匹配 "aaa"
{n,}至少匹配 n 次a{2,} 匹配 "aa"、"aaa" 等
{n,m}最少 n 次,最多 m 次a{2,4} 匹配 "aa"、"aaa"、"aaaa"
[...]字符集合,匹配方括号内的任意一个字符[aeiou] 匹配任意一个元音字母
[^...]否定字符集合,匹配不在方括号内的任意字符[^0-9] 匹配非数字字符
|或关系,匹配左边或右边的表达式cat|dog 匹配 "cat" 或 "dog"
()分组,将多个字符视为一个整体,并捕获匹配的子串(ab)+ 匹配 "ab"、"abab"
\d匹配数字,等价于 [0-9]\d{3} 匹配三个连续数字
\D匹配非数字,等价于 [^0-9]
\w匹配字母、数字、下划线,等价于 [A-Za-z0-9_]
\W匹配非字母、数字、下划线
\s匹配空白字符(空格、制表符、换行等)
\S匹配非空白字符
\b匹配单词边界\bcat\b 匹配单词 "cat" 而非 "catalog"
\B匹配非单词边界

3. 贪婪模式与非贪婪模式

默认情况下,量词(*+{n,m})是贪婪的,会尽可能多地匹配字符。在量词后添加 ? 可启用非贪婪模式,匹配尽可能少的字符。

示例: 字符串 "<div>content</div>",正则 <.*> 会匹配整个 "<div>content</div>",而 <.*?> 只匹配 "<div>"。

常见示例

  • 匹配邮箱: [\w\.-]+@[\w\.-]+\.\w+
  • 匹配手机号(中国大陆): 1[3-9]\d{9}
  • 匹配 IP 地址: (25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)
  • 匹配 HTML 标签: <[^>]+>

使用工具练习

您可以使用本站的 正则表达式测试工具 实时练习和验证您的正则表达式。