vim 零宽断言

原文链接:vim零宽断言

vim 中使用零宽度断言,包括

符号vim符号描述示例vim示例
?=\@=正先行断言-存在foo(?=bar)foo\(bar\)\@=
?!\@!负先行断言-排除foo(?!bar)foo\(bar\)\@!
?<=\@<=正后发断言-存在(?<=foo)bar\(foo\)\@<=bar
?<!\@<!负后发断言-排除(?<!foo)bar\(foo\)\@<!bar

零宽度断言(前后预查)

先行断言和后发断言都属于非捕获簇(不捕获文本 ,也不针对组合计进行计数)。
先行断言用于判断所匹配的格式是否在另一个确定的格式之前,匹配结果不包含该确定格式(仅作为约束)。

例如,我们想要获得所有跟在 $ 符号后的数字,我们可以使用正后发断言 (?<=\$)[0-9\.]*
这个表达式匹配 $ 开头,之后跟着 0,1,2,3,4,5,6,7,8,9,. 这些字符可以出现大于等于 0 次。

?=... 正先行断言

?=...正先行断言,表示第一部分表达式之后必须跟着 ?=...定义的表达式。

返回结果只包含满足匹配条件的第一部分表达式。
定义一个正先行断言要使用 (). 在括号内部使用一个问号和等号:(?=...)

正先行断言的内容写在括号中的等号后面。
例如,表达式 (T|t)he(?=\sfat) 匹配 Thethe, 在括号中我们又定义了正先行断言 (?=\sfat) , 即 Thethe 后面紧跟着 \nfat

“(T|t)he(?=\sfat)” => The fat cat sat on the mat.

?!... 负先行断言

负先行断言 ?! 用于筛选所有匹配结果,筛选条件为 其后不跟随着断言中定义的格式。
正先行断言 定义和 负先行断言 一样,区别就是 = 替换成 ``! 也就是 (?!...)

表达式 (T|t)he(?!\sfat) 匹配 Thethe, 且其后不跟着 \nfat

“(T|t)he(?!\sfat)” => The fat cat sat on the mat.

?<= ... 正后发断言

正后发断言 记作(?<=...) 用于筛选所有匹配结果,筛选条件为 其前跟随着断言中定义的格式。
例如,表达式 (?<=(T|t)he\s)(fat|mat) 匹配 fatmat, 且其前跟着 Thethe

“(?<=(T|t)he\s)(fat|mat)” => The fat cat sat on the mat.

?<!... 负后发断言

正后发断言 记作(?<=...) 用于筛选所有匹配结果,筛选条件为 其前跟随着断言中定义的格式。
例如,表达式 (?<=(T|t)he\s)(fat|mat) 匹配 fatmat, 且其前跟着 Thethe

负后发断言 记作 (?<!...) 用于筛选所有匹配结果,筛选条件为 其前不跟随着断言中定义的格式。
例如,表达式 (?<!(T|t)he\s)(cat) 匹配 cat, 且其前不跟着 Thethe

“(?<!(T|t)he\s)(cat)” => The cat sat on cat.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值