zoukankan      html  css  js  c++  java
  • 正则表达式的环视

    环视的英文叫做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”,如果匹配成功,则输出printw+,输出结果为printiamhere

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

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

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

  • 相关阅读:
    微信小程序音乐播放控制API在真机上貌似不可用?
    微信小程序request合法域名怎么配置啊
    微信小程序的路径是怎么计算的?
    微信小程序微信录音的silk格式文件怎么转MP3
    微信小程序全国巡回沙龙厦门站-尚琳凯演讲详细内容实录
    微信小程序全国巡回沙龙厦门站-A闪演讲详细内容实录
    微信小程序开发指南合集 各类组件用法技巧
    微信小程序常见问题及新手跳坑指南 每日更新 欢迎补充
    微信小程序沙龙回顾 附演讲实录及ppt
    laravel中的form表单提交
  • 原文地址:https://www.cnblogs.com/matthewma/p/7075384.html
Copyright © 2011-2022 走看看