正则表达式中的元字符

正则表达式中的元字符(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>

注意事项

  1. 元字符在不同正则引擎(如 PCRE、JavaScript)中可能有细微差异。
  2. 使用 \ 转义时需注意语言中的字符串转义(如 Python 中用 \\d 表示 \d)。
  3. 贪婪模式(*/+)与非贪婪模式(*?/+?)的区别。
  4. 当 ? 直接跟在普通字符后(如 a?),表示匹配前一个字符 0 次或 1 次(即“可选”)。
  5. 当 ? 跟在量词后(如 *?、+?、??、{n,m}?),表示将贪婪模式改为非贪婪模式(懒惰模式)。
posted @ 2025-07-28 23:27  kokoasann  阅读(54)  评论(0)    收藏  举报