- 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:通过:help pattern查看