正则表达式中的元字符(metacharacters)是具有特殊含义的字符,它们用于构建复杂的匹配模式。以下是常见的正则表达式元字符及其用途:
1. 基本元字符
| 元字符 | 
描述 | 
. | 
匹配任意单个字符(除换行符 \n 外)。 | 
^ | 
匹配字符串的开始位置(或在多行模式下匹配行首)。 | 
$ | 
匹配字符串的结束位置(或在多行模式下匹配行尾)。 | 
\ | 
转义字符,用于取消元字符的特殊含义(如 \. 匹配实际的点号)。 | 
2. 字符类
| 元字符 | 
描述 | 
[...] | 
匹配括号内任意一个字符(如 [aeiou] 匹配任意元音)。 | 
[^...] | 
匹配不在括号内的任意字符(如 [^0-9] 匹配非数字)。 | 
\d | 
匹配数字(等价于 [0-9])。 | 
\D | 
匹配非数字(等价于 [^0-9])。 | 
\w | 
匹配单词字符(字母、数字、下划线,等价于 [a-zA-Z0-9_])。 | 
\W | 
匹配非单词字符(等价于 [^a-zA-Z0-9_])。 | 
\s | 
匹配空白字符(空格、制表符 \t、换行符 \n 等)。 | 
\S | 
匹配非空白字符。 | 
3. 量词(重复匹配)
| 元字符 | 
描述 | 
* | 
匹配前一个字符 0 次或多次(贪婪模式)。 | 
+ | 
匹配前一个字符 1 次或多次(贪婪模式)。 | 
? | 
匹配前一个字符 0 次或 1 次(或用于非贪婪模式,如 .*?)。 | 
{n} | 
匹配前一个字符 恰好 n 次(如 \d{3} 匹配 3 位数字)。 | 
{n,} | 
匹配前一个字符 至少 n 次。 | 
{n,m} | 
匹配前一个字符 n 到 m 次(如 \w{2,4} 匹配 2~4 个单词字符)。 | 
4. 分组与捕获
| 元字符 | 
描述 | 
(...) | 
捕获分组,将括号内内容作为一个整体匹配并捕获。 | 
(?:...) | 
非捕获分组,仅分组但不捕获。 | 
| | 
或逻辑,匹配左边或右边的模式(如 cat|dog 匹配 "cat" 或 "dog")。 | 
5. 边界与断言
| 元字符 | 
描述 | 
\b | 
匹配单词边界(如 \bword\b 匹配独立的 "word")。 | 
\B | 
匹配非单词边界。 | 
(?=...) | 
正向先行断言,匹配后面紧跟指定模式的位置(不消耗字符)。 | 
(?!...) | 
负向先行断言,匹配后面不跟指定模式的位置。 | 
(?<=...) | 
正向后行断言,匹配前面是指定模式的位置(需固定宽度,如 (?<=\d))。 | 
(?<!...) | 
负向后行断言,匹配前面不是指定模式的位置。 | 
6. 其他特殊字符
| 元字符 | 
描述 | 
\n | 
匹配换行符。 | 
\t | 
匹配制表符。 | 
\r | 
匹配回车符。 | 
\xHH | 
匹配十六进制值 HH 对应的字符(如 \x41 匹配 "A")。 | 
示例
- 邮箱匹配:
^\w+([.-]?\w+)*@\w+([.-]?\w+)*(\.\w{2,3})+$ 
- 日期(YYYY-MM-DD):
^\d{4}-\d{2}-\d{2}$ 
- 提取 HTML 标签内容:
<([a-z]+)>(.*?)<\/\1> 
注意事项
- 元字符在不同正则引擎(如 PCRE、JavaScript)中可能有细微差异。
 
- 使用 
\ 转义时需注意语言中的字符串转义(如 Python 中用 \\d 表示 \d)。 
- 贪婪模式(
*/+)与非贪婪模式(*?/+?)的区别。 
- 当 ? 直接跟在普通字符后(如 a?),表示匹配前一个字符 0 次或 1 次(即“可选”)。
 
- 当 ? 跟在量词后(如 *?、+?、??、{n,m}?),表示将贪婪模式改为非贪婪模式(懒惰模式)。