zoukankan      html  css  js  c++  java
  • ruby 正则预查模式

    零宽正回顾后发断言  零宽正预测先行断言
        /(?<=behind)     (?=ahead)/
    /(?<!not-behind)    (?!not-ahead)/
    负向零宽后发断言   负向零宽先行断言

    str = "str 
    wait"
    str1 = "str 
    wert"

    puts str1 =~ /str\s*\n\s*(?!wait)/

    正向预查
    比如:
    有一个字符串:
    abcdefghi
    /ab(c)/ 将匹配出来abc 并将c储存到$1
    /ab(?:c)/ 将匹配出来abc 并不会将c储存到$1
    /ab(?=c)/ 将匹配出来ab,没有匹配出abc,那么c起什么作用呢,限定作用,解释器找到ab后没有马上返回,而是再查查ab后面的是c吗? 如果是c则才返回ab,否则返回匹配失败。看来它预查了c,难怪命名为正向预查。

    我个人觉得这个匹配有个替代方法,可以去匹配/(ab)c/,然后通过$1取出ab,我觉得牛的是下面的这个符号!
    =====
    ?!
    =====
    反(逆)向预查
    =号变为了!号,!表示非,可见这是一个非操作,这个是否可以解决开始的问题呢?
    比如:
    有一个字符串:
    abcdefghi
    /ab(?=c)/ 将匹配出来后面紧跟着c的ab
    推理:
    /ab(?!c)/ 将匹配出来后面紧跟着不是c的ab,在这个字符串里,将匹配不出结果。

  • 相关阅读:
    一键登录功能实现
    weblogic.xml中的虚拟目录的配置
    oracle定时器在项目中的应用
    redis主从架构的搭建
    oracle数据库中的trim不起作用
    datetimepicker日期框选择后,无法触发bootstrapValidator
    付出总有收获
    失落
    开启产品之路
    Nodejs入门级
  • 原文地址:https://www.cnblogs.com/zhangfei/p/2008137.html
Copyright © 2011-2022 走看看