正则表达式 – 元字符

正则表达式元字符详解

元字符(Metacharacters)是正则表达式中最核心的部分,它们不是匹配字面上的自身,而是具有特殊含义的符号,用于描述匹配规则。掌握元字符是写出强大正则的关键。

以下是所有常见元字符的完整列表,按功能分类说明(适用于 JavaScript、Python、Java、PHP 等主流引擎)。

1. 基本元字符(最常用)

元字符含义示例匹配示例不匹配示例
.匹配任意单个字符(除换行符 \n 外)a.c“abc”、”a1c”、”a#c”“ac”(太短)、”a\nc”
^匹配字符串或行的开头^abc“abcde” 中的 “abc”“xabc”
$匹配字符串或行的结尾abc$“xyzabc” 中的 “abc”“abcx”
\转义字符(使元字符变为普通字符,或普通字符变为特殊)\.匹配 “.”

2. 量词元字符(控制重复次数)

量词总是作用于前面的一个单元(可以是单个字符、字符集或分组)。

元字符含义示例匹配示例
*匹配前一个单元 0 次或多次ab*“a”、”ab”、”abbb”
+匹配前一个单元 1 次或多次ab+“ab”、”abb”(不匹配 “a”)
?匹配前一个单元 0 次或 1 次ab?“a”、”ab”
{n}匹配前一个单元正好 n 次a{3}“aaa”
{n,}匹配前一个单元至少 n 次a{2,}“aa”、”aaa” 等
{n,m}匹配前一个单元 n 到 m 次a{2,4}“aa”、”aaa”、”aaaa”
  • 贪婪模式:默认量词是贪婪的(尽可能多匹配)。在量词后加 ? 变为懒惰模式(尽可能少匹配)。
    示例:"a.*b"(贪婪)匹配 “a123b456b” 中的 “a123b456b”;"a.*?b"(懒惰)只匹配 “a123b”。

3. 字符类元字符(简写形式)

这些是预定义的字符集合,等价于 [...]

元字符等价于含义
\d[0-9]匹配一个数字
\D[^0-9]匹配一个非数字
\w[A-Za-z0-9_]匹配一个单词字符(字母、数字、下划线)
\W[^A-Za-z0-9_]匹配一个非单词字符
\s[ \t\r\n\f]匹配一个空白字符(空格、Tab、换行等)
\S\s匹配一个非空白字符

4. 边界元字符

元字符含义示例说明
\b单词边界(单词与非单词字符之间)\bcat\b匹配独立单词 “cat”,不匹配 “concat” 中的 cat
\B非单词边界\Bcat\B匹配 “concat” 中的 “cat”

5. 分组与选择元字符

元字符含义示例
()捕获分组(同时分组并记住匹配内容)(ab)+ 匹配 “ab”、”abab” 并捕获
(?:)非捕获分组(只分组,不记住)(?:ab)+ 同上但不创建捕获组
|或(选择分支)cat|dog 匹配 “cat” 或 “dog”

6. 零宽断言(高级,看断言,不消耗字符)

元字符含义示例
(?=pattern)正向前瞻:后面必须跟 patterna(?=\d) 匹配后面是数字的 “a”
(?!pattern)负向前瞻:后面不能跟 pattern\d+(?!px) 匹配不以 px 结尾的数字
(?<=pattern)正向后瞻:前面必须是 pattern(?<=¥)\d+ 匹配前面是 ¥ 的数字
(?<!pattern)负向后瞻:前面不能是 pattern(?<!¥)\d+ 匹配前面不是 ¥ 的数字

7. 其他元字符

元字符含义
[]字符集合(内部可包含范围、否定等)
[^]否定字符集合

转义规则提醒

当你需要匹配这些元字符本身时,必须用 \ 转义:

  • \.\*\+\$^\|\(``\)\[``\]\{``\}\\ 等。

小结:元字符记忆口诀

  • 位置^ $ \b \B
  • 数量* + ? {n,m}
  • 任意.
  • 类型\d \D \w \W \s \S
  • 选择分组| () (?:)
  • 断言(?=) (?! ) (?<=) (?<!)

这些元字符组合起来,就能构造出几乎所有复杂的匹配模式。建议在 regex101.com 上边看边练,很快就能熟练!

如果你想看某个元字符的更多实际例子,或者对比练习,随时说!

文章已创建 3511

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部