b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

精通正则表达式_精通正则表达式 第4版_精通正则表达式 mobi(2)

电脑杂谈  发布时间:2016-12-07 20:03:09  来源:网络整理

匹配优先量词我们已经学习了,就是?、+、*、{}这四个。匹配优先量词在匹配的时候首先会尝试匹配,如果失败后回溯才会选择忽略。比如`ab?`匹配"abb"会得到"abb"。这里当匹配成功'a'后,引擎有两个选择,一个是尝试匹配后面的b,一个是忽略后面的b,而由于是匹配优先,所以引擎会尝试匹配b,发现可以匹配,得到了"ab",接着引擎又一次遇到了同样的问题,还是会选择先匹配,所以得到了"abb",接着引擎发现后面没有字符了,就上报匹配成功。

忽略优先量词使用的是在?、+、*、{}后面添加?组成的,忽略优先在匹配的时候首先会尝试忽略,如果失败后回溯才会选择尝试。比如`ab??`匹配“abb”会得到‘a’而不是“ab”。当引擎匹配成功a后,由于是忽略优先,引擎首先选择不匹配b,继续查看表达式,发现表达式结束了,那么引擎就直接上报匹配成功。

例子1:

            var reg1=/ab?/;
            var reg2=/ab??/;
            var result1=reg1.exec("abc");
            var result2=reg2.exec("abc");
            document.write(result1+" "+result2);

结果:

例子2:

            var reg1=/ab+/;
            var reg2=/ab+?/;
            var result1=reg1.exec("abbbc");
            var result2=reg2.exec("abbbc");
            document.write(result1+" "+result2);

结果:

例子3:

            var reg1=/ab*/;
            var reg2=/ab*?/;
            var result1=reg1.exec("abbbc");
            var result2=reg2.exec("abbbc");
            document.write(result1+" "+result2);

结果:

例子4:

            var reg1=/ab{2,4}/;
            var reg2=/ab{2,4}?/;
            var result1=reg1.exec("abbbbbbc");
            var result2=reg2.exec("abbbbbbc");
            document.write(result1+" "+result2);

结果:

下面我们来看稍微复杂一点的匹配优先的情况,使用`c.*d`去匹配字符串“caaadc”,我们发现当c匹配成功后,`.*`会一直匹配到最后的'c',然后再去匹配表达式里面的d,发现后面没有字符可以匹配,这是就会回溯到`.*`匹配'c'的地方,选择`.*`忽略'c',那么c就留给后面了,但是发现还是不能匹配d,又得回溯到匹配d的位置,`.*`再次选择忽略匹配,发现就可以匹配d了,这是停止匹配,上报匹配成功,所以结果是“caaad”。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-22527-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 赵超
      赵超

      又怎么办再打巴萨尔没理由了

    每日福利
    热点图片
    拼命载入中...