正则表达式
# 正则表达式(Regex)
正则表达式(Regular Expression,简称Regex)是一种用于匹配字符串的强大工具,在文本搜索、数据提取、字符串替换等领域广泛应用。本教程将从基础到高级,系统介绍正则表达式的使用方法。
# 1. 正则表达式基础
# 1.1 什么是正则表达式?
正则表达式是一种模式(Pattern),用于匹配文本中的特定字符串。它可以用于:
- 搜索(查找符合特定规则的文本)
- 匹配(判断字符串是否符合规则)
- 替换(修改符合规则的文本)
在Python、JavaScript、Java等多种编程语言中,正则表达式都有相应的支持库。
# 1.2 正则表达式基本语法
符号 | 含义 | 示例 |
---|---|---|
. | 匹配任意单个字符(除换行符) | c.t 可匹配 cat , cut , c1t 等 |
^ | 匹配字符串的开头 | ^hello 可匹配 "hello world" 但不匹配 "hi hello" |
$ | 匹配字符串的结尾 | world$ 可匹配 "hello world" 但不匹配 "world hello" |
* | 匹配前一个字符 0 次或多次 | ab*c 可匹配 "ac" , "abc" , "abbc" |
+ | 匹配前一个字符 1 次或多次 | ab+c 可匹配 "abc" , "abbc" ,但不匹配 "ac" |
? | 匹配前一个字符 0 次或1次 | ab?c 可匹配 "ac" 和 "abc" |
{n} | 匹配前一个字符 n 次 | a{3} 只匹配 "aaa" |
{n,} | 匹配前一个字符 至少 n 次 | a{2,} 匹配 "aa" , "aaa" , "aaaa" |
{n,m} | 匹配前一个字符 n 到 m 次 | a{2,4} 匹配 "aa" , "aaa" , "aaaa" |
[] | 匹配括号中的任意字符 | [abc] 可匹配 "a" , "b" , "c" |
| | 逻辑“或” | |
\ | 转义特殊字符 | \. 可匹配 . (点)本身 |
# 2. 字符类(Character Classes)
字符类用于定义一组可匹配的字符。
字符类 | 含义 | 示例 |
---|---|---|
[abc] | 匹配 a 、b 或 c | [ch]at 可匹配 "cat" 或 "hat" |
[^abc] | 非 a 、b 、c | [^0-9] 匹配非数字字符 |
[a-z] | 匹配小写字母 | [a-zA-Z] 匹配所有英文字母 |
[0-9] | 匹配数字 | [0-9]+ 匹配 "123" , "456" |
. | 匹配任意字符(除换行) | a.c 可匹配 "abc" ,但不匹配 "ac" |
# 3. 预定义字符
正则表达式提供了一些预定义的字符,代表常见的字符类型。
预定义字符 | 含义 | 示例 |
---|---|---|
\d | 数字 [0-9] | \d+ 匹配 "123" , "42" |
\D | 非数字 [^0-9] | \D+ 匹配 "abc" , "XYZ" |
\w | 单词字符 [a-zA-Z0-9_] | \w+ 匹配 "hello" , "world_123" |
\W | 非单词字符 [^a-zA-Z0-9_] | \W+ 匹配 "@#$%!" |
\s | 空白字符(空格、制表符、换行符) | \s+ 可匹配 " " |
\S | 非空白字符 | \S+ 可匹配 "hello" |
# 4. 分组(Grouping)与引用
# 4.1 捕获组(Capturing Groups)
用小括号 ()
将部分模式分组,以便引用。
示例:
(\d{3})-(\d{2})-(\d{4})
1
匹配 "123-45-6789"
,并捕获:
\1
:123
\2
:45
\3
:6789
# 4.2 反向引用
在替换或匹配中,可用 \1
引用之前匹配的组。
示例:
(\w+)\s\1
1
可匹配 "hello hello"
(重复单词)。
# 5. 贪婪与惰性匹配
模式 | 匹配规则 |
---|---|
.* | 贪婪匹配(尽可能多匹配) |
.*? | 惰性匹配(尽可能少匹配) |
示例:
<.*>
1
匹配 <div>hello</div>
,但会匹配整个 <div>hello</div>
。
如果使用:
<.*?>
1
则只匹配 <div>
。
# 6. 断言(Assertions)
# 6.1 位置匹配
断言 | 含义 | 示例 |
---|---|---|
^ | 开头匹配 | ^hello 只匹配 "hello world" |
$ | 结尾匹配 | world$ 只匹配 "hello world" |
\b | 单词边界 | \bcat\b 只匹配 " cat " |
\B | 非单词边界 | \Bcat\B 不匹配 " cat " |
# 6.2 前后向断言
断言 | 描述 | 示例 |
---|---|---|
(?=...) | 正向预查(后面必须是...) | \d(?=px) 匹配 "10px" 中的 10 |
(?!...) | 负向预查(后面不能是...) | \d(?!px) 匹配 "10kg" 中的 10 |
(?<=...) | 正向回顾(前面必须是...) | (?<=\$)\d+ 匹配 "$100" 中的 100 |
(?<!...) | 负向回顾(前面不能是...) | (?<!\$)\d+ 不匹配 "$100" |
# 7. 实践案例
# 7.1 邮箱验证
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
1
# 7.2 手机号匹配
^1[3-9]\d{9}$
1
# 7.3 URL 匹配
https?:\/\/(www\.)?[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(/.*)?$
1
编辑 (opens new window)
上次更新: 2025/04/01, 01:48:12
← 什么是VPN