📌 目录:
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+
相当于 cat
或 dog+
,而非 (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. 参考资料
🔗 出站链接
🔗 站内链接
这样整理后,你觉得是否符合你的需求?😃
发表回复