什么是正则表达式?
正则表达式(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 标签:
<[^>]+>
使用工具练习
您可以使用本站的 正则表达式测试工具 实时练习和验证您的正则表达式。