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

 

posted on 2011-04-07 17:14  张飞_  阅读(477)  评论(0编辑  收藏  举报

导航