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,在这个字符串里,将匹配不出结果。

  • 相关阅读:
    c#之线程池优先级
    c#之线程池
    c# 回调委托
    c# Beginlnvoke 委托
    Qrcode生成二维码支持中文,带图片,带文字
    http://fonts.googleapis.com/css?打开很慢解决方案
    MVC多语言应用
    SQL参数化查询的问题
    MVC:从客户端中检测到有潜在危险的 Request.Form 值 的解决方法
    CSS计数器妙用
  • 原文地址:https://www.cnblogs.com/zhangfei/p/2008137.html
Copyright © 2011-2022 走看看