正则表达式 - 元字符

正则表达式元字符详解

元字符 (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)+ 同上但不创建捕获组
` ` 或(选择分支)
6. 零宽断言(高级,看断言,不消耗字符)
元字符 含义 示例
(?=pattern) 正向前瞻:后面必须跟 pattern a(?=\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 上边看边练,很快就能熟练!

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

相关推荐
西幻凌云2 小时前
初始——正则表达式
c++·正则表达式·1024程序员节
侧耳倾听1112 小时前
mysql中的binlog-介绍
数据库·mysql
阿赵3D2 小时前
JavaScript学习笔记——11、正则表达式
javascript·笔记·学习·正则表达式
一叶飘零_sweeeet2 小时前
正则表达式从入门到精通:吃透底层逻辑,解决99%的实际问题
正则表达式
少云清2 小时前
【接口测试】4_PyMySQL模块 _操作数据库
服务器·网络·数据库
IndulgeCui2 小时前
Kingbase-金仓企业级统一管控平台KEMCC一键部署主备集群及转换读写分离集群
数据库
数据库生产实战2 小时前
Oracle升级避坑指南:APEX卸载后sys.htmldb_system无效对象的处理方法
数据库·oracle
冰冰菜的扣jio2 小时前
SQL语句是如何在MySQL中执行的
数据库·sql
么么...2 小时前
掌握 MySQL:数据类型、数据定义语言DDL、数据操作语言DML
数据库·经验分享·sql·mysql