正则表达式 - 元字符

正则表达式元字符详解

元字符 (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 上边看边练,很快就能熟练!

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

相关推荐
独自破碎E8 分钟前
MySQL中如何进行SQL调优?
数据库·sql·mysql
laplace012323 分钟前
第八章 agent记忆与检索 下
数据库·人工智能·笔记·agent·rag
MyselfO(∩_∩)O34 分钟前
1148. 文章浏览 I
数据库
少云清1 小时前
【性能测试】10_JMeter _JMeter连接数据库(重点)
数据库·jmeter
程序员敲代码吗1 小时前
使用Python进行PDF文件的处理与操作
jvm·数据库·python
小光学长1 小时前
基于SSM的个人健康系统26vxdh02(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库
林九生1 小时前
【MySQL/PostgreSQL】MySQL 到 PostgreSQL 数据迁移:Docker + pgloader
mysql·docker·postgresql
mit6.8241 小时前
sql窗口函数
数据库
七七七七072 小时前
【Redis】Ubuntu22.04安装redis++
数据库·redis·缓存
heze092 小时前
sqli-labs-Less-19自动化注入方法
mysql·网络安全·自动化