- VIM 对转义字符的处理上有 magic、nomagic、very magic、very nomagic 4种方式,下面提到的是magic下情况。
- Qt 在贪婪非贪婪是通过额外的选项设置的,不体现在pattern中
| Python | Qt | VIM | ||
| 字符串开头 | ^ | ^ | ^ | vim中,\A代表非字符,与\a即[0-9A-Za-z]对应 |
| 字符串结尾 | $ | $ | $ | |
| 单词边界 | \b | \b | \< | vim中\b代表退格,其他[\b]表示退格 |
| 单词字符 | \w | \w | \w | 对于vim,指[0-9A-Za-z_],其他,包含Unicode |
| 数字字符 | \d | \d | \d | 对vim,指[0-9],其他,包含Unicode数字字符 |
| 0次或1次 | ? | ? | \? | Python中额外带问号的是非贪婪模式 |
| 0次或多次 | * | * | * | |
| 1次或多次 | + | + | \+ | |
| 重复n次 | {n} | {n} | \{n} | |
| n次以上 | {n,} | {n,} | \{n,} | |
| n到m次 | {n,m} | {n,m} | \{n,m} | |
| 子表达式(分组) | (...) | (...) | \(...\) | 两种用途,分组以便应用重复,回溯引用通过\1\2... |
| 引用子表达式 | \number | \number | \number | |
| 只是分组 | (?:...) | (?:...) | \%(...\) | 不计算为子表达式个数,不能回溯 |
| 向前查找(lookahead) | (?=...) | (?=...) | \(...\)\@= | 比如"zhang(?=800)"找到zhang后要检查其后是否是800,是则成功。将匹配zhang800而不是zhang801中的zhang |
| 负向前查找(negative lookahead) | (?!...) | (?!...) | \(...\)\@! | 同上,只是不是...则成功。"zhang(?=800)"匹配dbzhang801而不是dbzhang800中的zhang |
| 向后查找(positive lookbehind) | (?<=...) | \(...\)\@<= | 比如"(?<=db)zhang"找到zhang后要检查其前面是否是db,是则成功。匹配dbzhang而不是debaozhang的zhang. | |
| 负向后查找(negative lookbehind) | (?<!...) | \(...\)\@<! | 同上,最后,不是...则成功。匹配debaozhang中的zhang |
参考
-
Vim manual:通过:helppattern查看
本文深入探讨了VIM和Qt中正则表达式的魔法模式、非贪婪模式及特殊字符用法,包括字符串匹配、单词边界、字符集、重复次数、子表达式、前瞻与回顾查找等核心概念。
3010

被折叠的 条评论
为什么被折叠?



