📌 目录:

  1. 运算符优先级概述
  2. 正则表达式运算符优先级表
  3. 优先级解析与示例
  4. 运算符结合性
  5. 参考资料

1. 运算符优先级概述

正则表达式中,不同运算符有不同的优先级,决定了它们在解析时的执行顺序。优先级高的运算符会先执行,而低优先级的运算符可以用 () 来调整执行顺序。


2. 正则表达式运算符优先级表

优先级运算符说明示例
1️⃣(最高)\转义\. 匹配 .
2️⃣()分组和捕获(abc)+
3️⃣[...]字符类[a-z0-9]
4️⃣? * + {n,m}量词(贪婪或懒惰)a+, b{2,4}
5️⃣^$行锚^hello$
6️⃣(最低)``逻辑或

3. 优先级解析与示例

1️⃣ \ – 转义

优先级最高,用于让元字符(如 . * +)失去特殊含义。

🔹 示例:

a\.b

✅ 匹配:"a.b"
❌ 不匹配:"acb". 作为普通字符匹配,而非任意字符)


2️⃣ () – 分组

分组优先级高于量词和逻辑或,使得 () 内的表达式作为整体计算。

🔹 示例 1:

(ab)+

✅ 匹配:"abab"(整体 "ab" 可重复)
❌ 不匹配:"aabb"

🔹 示例 2:

cat|dog+

相当于 catdog+,而非 (cat|dog)+

✅ 匹配:"cat", "dogg"
❌ 不匹配:"catdog"(需要 (|) 明确分组)


3️⃣ [...] – 字符类

字符类 [...] 具有比量词更高的优先级,表示匹配其中的任意一个字符。

🔹 示例:

[ab]+

✅ 匹配:"aaa", "bba", "abab"
❌ 不匹配:"c"

注意:- 表示范围,^ 取反,只在 [] 内有特殊含义

[^aeiou]

匹配任何非元音字符。


4️⃣ ? * + {n,m} – 量词

量词作用于前面的字符或分组,比行锚和逻辑或优先级高。

🔹 示例 1:

ab*

✅ 匹配:"a", "ab", "abb"b 可出现 0 次或多次)
❌ 不匹配:"b"

🔹 示例 2:

(ab)+

✅ 匹配:"ab", "abab"ab 作为整体重复)
❌ 不匹配:"aabb"


5️⃣ ^$ – 行锚

^ 代表行首,$ 代表行尾,优先级高于 |

🔹 示例:

^hello|world$

匹配:"hello abc""abc world"
但不会匹配 "hello world"(因为 | 的优先级低)

正确分组方式(保证 hello 在行首或 world 在行尾):

^(hello|world)$


6️⃣ | – 逻辑或

优先级最低,会应用于整个表达式。

🔹 示例:

go|goose

✅ 匹配:"go", "goose"

错误解析:

go+

✅ 匹配 "go""goo"
go|go+ 会匹配 "go",不会匹配 "goo",因为 go 先匹配成功,+ 没机会执行。


4. 运算符结合性

结合性决定了运算符的解析方向。

运算符结合性说明
\从右到左先解析右侧字符
() [...]从左到右先解析左侧组
? * + {}从左到右先解析左侧量词
^ $从左到右作用于整个表达式
``从左到右

🔹 示例(结合性导致的不同匹配):

go+|goose

✅ 匹配 "go""goo"(因为 go+ 先匹配)

(go+|goose)

✅ 匹配 "go""goo""goose"(确保 goose 作为整体匹配)


5. 参考资料

🔗 出站链接

🔗 站内链接


这样整理后,你觉得是否符合你的需求?😃