正则表达式——表达式中的优先级
正则表达式千变万化,都是由之前介绍的字符组、括号、量词等等基本结构组合而成的,只要掌握了组合的规则,面对再复杂的表达式,都能把结构梳理清楚。
仔细观察会发现,正则表达式的元素之间的组合关系只有4种。
普通拼接 | abc |
---|---|
括号 | (abc) |
量词 | a*b |
多选结构 | ab |
注:“普通拼接”可能是最常见的组合关系,只是品势不一定明确意识到,正则表达式,abc就是a和b和c的普通拼接。a(ab)则可以看做a和(bc)的拼接。
出列出的4种组合关系外,正则表达式中的其他结构,比如环视(?=...)
,都可以视为单独的元素,其中的正则表达式最终可以归类到上面的4种组合关系中。
所以,真正需要关心的就是这4种组合的优先级。
正则表达式的优先级
优先级 | 组合 | 说明 |
---|---|---|
1 | (regex) | 整个括号内的字表达式称为单个元素 |
2 | * ? + | 限定之前紧邻的元素 |
3 | abc | 普通拼接,元素相继出现 |
4 | a|bc | 多选结构 |
注:数字越小,优先级越高。
正则表达式中的优先级举例
正则表达式 | 能匹配的字符串 | 说明 |
---|---|---|
ab | ab | 普通拼接 |
ab+ | ab abb abab | 量词的优先级高于普通拼接 |
(ab)+ | abc aabc aabc | 括号的优先级高于量词 |
ab|cd | ab cd | 多选结构的优先级低于量词 |
(ab|c)d | abd cd | 括号的优先级高于多选结构和量词 |