最近在看《精通正则表达式》 里面讲到了表达式主导和文本式主导
还拿了个例子to(nite|knight|night)来匹配文本tonight   表达式主导和文本式主导的处理 愣是没看明白
大伙给偶用通俗的话给偶讲讲呗  脑袋不开窍 虚心求教了...

解决方案 »

  1.   

    不知道你看看的是不是这个文章,觉得说的够清楚了http://hi.baidu.com/sunsee/item/d548cb8485ad2dcdee083d3d
      

  2.   

    to(nite|knight|night)
    匹配tonite,toknight,tonight这三个单词
      

  3.   

    也就是说字符串中比如t被正则to(nite|knight|night)重复测试了3次?那文本式主导呢?我就是想看看大伙的理解  我看书看的头昏眼花了。
      

  4.   

    NFA是“表达式主导”,DFA是“文本主导”
    目标文本中的每一个字符在NFA中可能会被检查多次,但在DFA中最多只会被检查一次。
    传统型NFA支持忽略优先量词(*?、+?、??、{num,num}?)
    DFA不支持捕获型括号(capturing parentheses)和回溯(backreference)
      

  5.   

    NFA是“表达式主导”
    目标字符串中night被正则to(nite|knight|night)重复测试了3次,to 之后nite, knight, night各一次DFA是“文本主导”
    目标字符串tonight被正则to(nite|knight|night)扫描了一次,to 之后扫描n,knight抛弃,再之后扫描i,nite和night都保留,再之后扫描g,则nite抛弃,一直扫描到最后的t,发现匹配完成了,则报告成功
      

  6.   

    http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html#introduction
    很有用 我就是自己学会的 。。
      

  7.   

    你可以作如下测试:将正则表达式"regex|regex not"应用到字符串“regex not”。如果匹配的结果是regex,则引擎是正则导向(regex-directed)。如果结果是regex not,则是文本导向(text-directed)。因为正则导向的引擎是“猴急”的,它会很急切的进行表功,报告它找到的第一个匹配 。