正则表达式中的元字符(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}?),表示将贪婪模式改为非贪婪模式(懒惰模式)。