美文网首页
正则之前后查找

正则之前后查找

作者: 高鸿祥 | 来源:发表于2019-02-28 21:31 被阅读6次

    前后查找是指对某一位置的前后内容进行查找,匹配本身并不返回,而是用来确定正确的匹配位置。即一个必须匹配但不在结果中返回的模式(只匹配不消费)。

    向前查找

    语法

    (?=pattern)
    

    一个以?=开头的子表达式,需要匹配的文本跟在=的后面

    例:匹配协议名

    http://www.baidu.com
    https://www.google.com
    ftp://ftp.forta.com
    

    正则表达式

    .+(?=:)
    

    结果

    匹配到:http、https、ftp

    解析

    .+匹配任意字符一次或多次。(?=:)匹配,但:不出现在结果中(不消费)。因为?=向正则表达式引擎表明:只要找到的位置就好了,不要把它包括在最终的匹配结果里(不消费它)。结果值包含前面的字符

    向后匹配

    语法

    (?<=pattern)
    

    例:匹配价格

    apple:¥2.99
    banana:¥5.5
    pitaya:¥100.21
    

    正则表达式

    (?<=¥)[0-9.]+
    

    结果

    匹配到2.99、5.5、100.21

    解析

    (?<=¥)匹配到但不出现在结果里(不消费),[0-9.]+匹配0-9或.的任意一次或多次

    组合前后查找

    向前查找和向后查找可以组合在一起使用

    例:只匹配标题文本

    <title>hello world</title>
    

    正则表达式

    (?<=\<[tT][iI][tI][lL][eE]>).*?(?=</[tT][iI][tI][lL][eE]>)
    

    结果

    匹配到hello world

    解析

    (?<=\<[tT][iI][tI][lL][eE]>)向后查找,匹配<title>但不消费它,为了减少歧义,title的做尖括号转译了。.*?匹配到hello world。(?=</[tT][iI][tI][lL][eE]>)向前查找,匹配到</title>,但不消费它。

    对前后查找取非

    对前后查找取非即负前后查找,它的意思是返回不与前后查找的给定模式相匹配的文本。

    语法

    负向前查找 (?!)
    负向后查找 (?<!)
    

    例:查找非价格数字

    I paid $30 for 100 apples, 50 oranges. 
    I saved $5 on this order.
    

    正则表达式

    \b(?<!\$)\d+\b
    

    结果

    匹配到:100、50

    解析

    \d匹配到数字,(?<!\$)匹配到不以开头的数字。`\b`限定单词边界,如果不限定,30中的0也会被匹配到。

    相关文章

      网友评论

          本文标题:正则之前后查找

          本文链接:https://www.haomeiwen.com/subject/yhkluqtx.html