(?<url>(?<=<a href ?= ?('|\")?)[^'\">]+?(?='|\"|>)).*(?<Text>(?<=>)[^<]+?(?=</a>))
请问这段正则是什么意思,有人能帮忙分析一下吗?还有就是一般的URL都能匹配了,就出一点小BUG如:
"<a href='http://www.kook.com/women/index_4.html'>4</a>"+
 "<a href='http://www.kook.com/women/index_5.html'>5</a>
匹配出来的结果是'http://www.kook.com/women/index_4.html 5 这是怎么回事

解决方案 »

  1.   


    @"(?<url>(?<=<a\b\s+href\s*=\s*['""]?)[^'"">]+(?=['"">])).*?(?<Text>(?<=>)\s*[^\s<]+\s*(?=</a>))"
    这个吧,我给你稍微的改了改
    或者你的可以这样改
    (? <url>(? <= <a href ?= ?('|\")?)[^'\">]+?(?='|\"|>)).*?(? <Text>(? <=>)[^ <]+?(?= </a>)) 
      

  2.   

    正则好工具:Expresso
    工具之二: The Regulator辅助生成、分析、测试正则表达式
    非常好用,不可不试
      

  3.   

    因为 .* 是贪婪的,会尽可能的匹配,而且 . 会在非单行模式下匹配出换行符之外的任意字符,在单行模式下匹配任意字符
    " <a href='http://www.kook.com/women/index_4.html'>4 </a>"+ 
    " <a href='http://www.kook.com/women/index_5.html'>5 </a>"
    当你的字符串匹配到 "index_4.html'" 时,直到最后一个字符都会被 . 匹配,这样的话就会匹配到 "index_5.html'>5 </a>"
    因为正则要求还要匹配 >< 之间的字符,所有正则引擎会从最后一个匹配的字符开始回溯,一直回溯到 "index_5.html'>" 
    这样在匹配就将 5 匹配出来了
    如果你的字符串是
    " <a href='http://www.kook.com/women/index_4.html'>4 </a>"+ 
    " <a href='http://www.kook.com/women/index_5.html'>5 </a>"+ 
    " <a href='http://www.kook.com/women/index_6.html'>6 </a>"
    那么取到的text将会是6
    当 .*? 的时候,正则表达式变成非贪婪的,就是尽可能少的匹配,这样就会逐一匹配出来了