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,在这个字符串里,将匹配不出结果。
点亮测试人生!QQ:408129370
百度阅读电子书地址:http://yuedu.baidu.com/ebook/f6dbb2a2f01dc281e53af0f3
讨论QQ群:536192476
个人公众号:
百度阅读电子书地址:http://yuedu.baidu.com/ebook/f6dbb2a2f01dc281e53af0f3
讨论QQ群:536192476
个人公众号: