项目中用到正则,现在Greedy匹配与Reluctant匹配算有些搞清楚了,但group的用法还是有些疑问,比如:
(Express A)|(Express B), Express A 是Greedy的而 Express B是Reluctant的,那匹配按照什么样的规律来?
我写程序测试发现,Express A 与 Express B的前后顺序不同,结果会有所不同,为什么?

解决方案 »

  1.   

    比如:(<!--.{0,}-->)|(<.{0,}?>)与(<.{0,}?>)|(<!--.{0,}-->),
    匹配“<1><!--<a><b>--><2>”结果是不一样的。
      

  2.   

    (Express A)|(Express B)是按照Express A匹配的,如果没有找到,那么按照Express B匹配。
    若是在某一段里Express A没有匹配而Express B有匹配,也会按Express B匹配。匹配完这段后又现匹配Express A,如此循环。
    eg:(ab)|(a.*d)   ababaadab
     先匹配ab ab ,然后匹配aad,然后匹配ab