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

  • 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

参考


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值