 正则表达式
正则表达式
  # 正则表达式(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/10/15, 09:17:23
