正则表达式的环视

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

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

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

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

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

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

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

printiamhere
erintiamhere      
printyouarethere
printwheretheyare

上述文件命名为test.txt

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

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

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

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

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

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

 

转载于:https://www.cnblogs.com/matthewma/p/7075384.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值