码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式的环视

时间:2017-06-25 10:14:41      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:结果   div   说明   test   语句   eth   断言   span   使用   

环视的英文叫做lookaround,这是在“精通正则表达式”一书中的叫法。在不同的书籍跟文档中,它又被叫做“断言”,“前视”,“预搜索”等。环视分为以下几种。

顺序肯定环视。表示所在位置右侧能够匹配Expression。在python中为string(?=Expression),在vim中为/string\(Expression\)\@=

顺序否定环视。表示所在位置右侧能够匹配Expression。在python中为string(?!Expression),在vim中为/string\(Expression\)\@!

逆序肯定环视。表示所在位置左侧能够匹配Expression。在python中为string(?<=Expression),在vim中为/string\(Expression\)\@<=

逆序否定环视。表示所在位置左侧能够匹配Expression。在python中为string(?<!Expression),在vim中为/string\(Expression\)\@<!

在vim中使用very magic的话,则为/\vstring(Expression)@=(其它3种模式类似,都是去掉\即可),grep中使用-P,可以使用python模式

所在位置指的是string这个字符串中最后一个字符的右边。另外环视中Expression是不作为正则表示式的匹配结果输出的,Expression只是类似if中的判断语句,意思是在匹配string的情况下,满足(?=Expression)的话,则输出string。当然在正则表示式的规则下,Expression的右边也可以带有正则表达式的字符串,如string(?=Expression)string。此时,在匹配string的情况下,满足(?=Expression)的话,则输出stringstring。下面举个例子说明

print iamhere
print youarethere
print wheretheyare

上述文件命名为test.txt

使用grep -Po "print(?= iamhere)" test.txt。 则表示,在找到“print”字符串的情况下,从字符“t”的右边开始匹配“ iamhere”,如果匹配成功,则输出print

使用grep -Po "print(?= iamhere)" test.txt。 则表示,在找到“print”字符串的情况下,从字符“t”的右边开始匹配“ iamhere”,如果匹配不成功,则输出print

使用grep -Po "print(?= iamhere) \w+" test.txt。 则表示,在找到“print”字符串的情况下,从字符“t”的右边开始匹配“ iamhere”,如果匹配成功,则输出print \w+,输出结果为print iamhere

使用grep -Po "print(?! iamhere) \w+" test.txt。 则表示,在找到“print”字符串的情况下,从字符“t”的右边开始匹配“ iamhere”,如果匹配不成功,则输出print \w+,输出结果为print youarethere和print wheretheyare

使用grep -Po "print(?<! iamhere) \w+" test.txt。 则表示,在找到“print”字符串的情况下,从字符“p”的左边开始匹配“ iamhere”,如果匹配不成功,则输出print \w+,输出结果为print iamhere和print youarethere和print wheretheyare

其它情况类似,不一一举例子了。

 

正则表达式的环视

标签:结果   div   说明   test   语句   eth   断言   span   使用   

原文地址:http://www.cnblogs.com/matthewma/p/7075384.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!