娟斌心 发表于 2017-5-5 08:27:31

正则表达式语法学习(Python/Qt/Vim)


[*]VIM 对转义字符的处理上有 magic、nomagic、very magic、very nomagic 4种方式,下面提到的是magic下情况。
[*]Qt 在贪婪非贪婪是通过额外的选项设置的,不体现在pattern中
Python
Qt
VIM
字符串开头
^
\A
^
^
vim中,\A代表非字符,与\a即对应
字符串结尾
$
\Z
$
$
单词边界
\b
\b
\<
\>
vim中\b代表退格,其他[\b]表示退格
单词字符
\w
\w
\w
对于vim,指,其他,包含Unicode
数字字符
\d
\d
\d
对vim,指,其他,包含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查看
页: [1]
查看完整版本: 正则表达式语法学习(Python/Qt/Vim)