VIM正则表达式之零宽断言
零宽断言就是zero-width,我觉得很难懂,但是搞清楚了其实很简单:
:echo matchstr(“abc1234def”, “\\v(abc)@<=(.{-})(def)@=”)
比如上述例子是一个典型的零宽断言应用,要求是abc的后面,def的前面,需要结合两个零宽断言来写,正则表达式结构看起来复杂其实简单:
“(abc)@<=(.{-})(def)@=”
可以分成三部分:
(abc)
这是匹配前面的正则表达式,放在@<=前面,表示所要取得的字符串,是在能匹配这个正则表达式的部分的后面
(def)
这是匹配后面的正则表达式,放在@=的前面,表示所要取得的字符串,是在能匹配这个正则表达式的部分的前面
(.{-})
这就是我们要取得的字符串的正则表达式了,这里{-}是表示尽可能短的一个字符串,不是蛤总的一个眼镜框。
额外说明一下,\\v是一个前缀,它表示这个字符串完全使用正则表达式,星号不是星号,是代表任意匹配,@<=也不是三个普通字符,而是代表前置零宽断言,因为在字符串里面,所以使用两个斜杠,如果在vim查找当中使用,只要一个就可以了 :/\v(abc)@<=(.{-})(def)@= ,会在1234那里匹配成功。
也就是说,要写一个零宽断言,获取两个正则表达式之间的部分,可以分成 (表达式前)@<=(表达式)(表达式后)@=,表示取得“表达式前”和“表达式后”之间,能够匹配”表达式“的字符串。按照这个路数往上套就可以了。零否断言也一样原理。
标签集合/Tag clouds
C++
Symbain
轻松汇编
算法
论文学习
资治通鉴
Delphi
编程之美
Poco
MFC
Linux
IFC
知乎
汇编
数据分析
交叉编译
poco
j2me
android
XML
Java
DTD
飞信
零宽断言
诺基亚
联系人
编程
真值表
池西木
正则表达式
多线程
命令行
优化
stream
configure
cmake
VIM
UiAutomator
TDD
Symbian
Sqlite
SourceInsight
Python
MPAndroidChart
Kotlin
Flutter
Dokka
Chatgpt