需求 regex:ab|abc
我现在有一个字符串zzabzabczzz
希望结果查出 abc,但是匹配是顺序的,首先匹配的是ab所以永远匹配不到abc不能修改regex为abc|ab

解决方案 »

  1.   

       “在Perl、PHP、Java、.NET以及其他语言使用的传统型NFA引擎。遇到多选结构时,这种引擎会按照从左到右的顺序检查表达式中的多选分支。
        对于常见的传统型NFA引擎,用「tour|to|tournament」来匹配‘threetournaments won’时,会得到什么结果呢?在尝试到‘threetournamentswon’时,在每个位置进行的匹配尝试都会失败,而且每次尝试时,都会检查所有的多选分支(并且失败)。而在这个位置,第一个多选分支「tour」能够匹配。因为这个多选结构是正则表达式中的最后部分,「tour」匹配结束也就意味着整个表达式匹配完成。其他的多选分支就不会尝试了。”摘自《精通正则表达式》这种问题在实际应用中的意义很小,因为它和NFA的引擎匹配原理是相悖的。
    如果是作为一道题来刁难人,楼主能详细说明regex在多大的范围内作出改动?
      

  2.   

    楼上说的对,NFA引擎是匹配成功后不回溯,想把NFA改成DFA,那就去看编译原理吧
    这里只能通过修改正则
    比如这样
    ab(?!c)|abc