|
- VIM 对转义字符的处理上有 magic、nomagic、very magic、very nomagic 4种方式,下面提到的是magic下情况。
- Qt 在贪婪非贪婪是通过额外的选项设置的,不体现在pattern中
| Python
| Qt
| VIM
| | 字符串开头
| ^
\A
| ^
| ^
| vim中,\A代表非字符,与\a即[0-9A-Za-z]对应
| 字符串结尾
| $
\Z
| $
| $
| | 单词边界
| \b
| \b
| \<
\>
| vim中\b代表退格,其他[\b]表示退格
| 单词字符
| \w
| \w
| \w
| 对于vim,指[0-9A-Za-z_],其他,包含Unicode
| 数字字符
| \d
| \d
| \d
| 对vim,指[0-9],其他,包含Unicode数字字符
| 0次或1次
| ?
??
{,1}
{,1}?
{0,1}
{0,1}?
| ?
{0,1}
| \?
\=
\{,1}
\{-,1}
\{0,1}
\{-0,1}
| Python中额外带问号的是非贪婪模式
vim中带负号的是非贪婪
?*+这3种都可以看作{m,n}的特例,后面不再列这么多了
| 0次或多次
| *
*?
| *
| *
\{}
\{-}
| | 1次或多次
| +
+?
| +
| \+
| | 重复n次
| {n}
| {n}
| \{n}
\{-n}
| | n次以上
| {n,}
{n,}?
| {n,}
| \{n,}
\{-n,}
| | n到m次
| {n,m}
{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
|
参考
- http://docs.python.org/howto/regex.html
- http://docs.python.org/py3k/library/re.html
- http://doc.qt.nokia.com/4.7/qregexp.html
- Vim manual:通过:helppattern查看
|
|
|