例如http://www.abc.com/和http://www.abc.com/images/index.php都能匹配,
但http://www.abc.com/images/logo.gif就不能匹配。
我写的表达式会匹配到http://www.abc.com/images/logo.这段
(http\://)?([a-z0-9_-]+\.)+(com|net|cn|org){1}(\/[a-z0-9_-]+)*\.?(?!jpg|jpeg|gif|png|bmp)

解决方案 »

  1.   

    一般url后面都有其他不相关字符,建议你利用这个字符
    例如:
    "http://www.abc.com/images/logo.gif"
    ...前略(?!:jpg|jpeg|gif|png|bmp)(?:")
      

  2.   

    刚才没有测试环境,随意写的,想想有点问题,找了个环境重新写了一个$s='http://www.abc.com/image/index.php"http://www.abc.com/images/logo.gif"';
    preg_match_all('#/[^/]*(?<=\....(?<!jpg|gif))"#', $s, $m); // -6
    var_export($m);大致吧,你自己理解一下再修改来用
    这里\....匹配圆点和三字符的扩展名,没有圆点扩展名或者不是三个字符的情况自己摸索吧
      

  3.   


    嗯,有道理,html的图片都是带有标签的,不过还有一种情况就是bbcode的代码,还好也是带有标签的,能不能帮我写这个完整的表达式?我下面举例给你看看,
    匹配除了上面两种情况的所有url地址,谢谢!!!
      

  4.   

    晕,不能编辑帖子,上面第一行代码其实也是bbcode来的,就是第二行没有 =88,31 这段,论坛把它转成html了
      

  5.   

    其实你是想要匹配超链接地址,前面加上href就好匹配了。
      

  6.   

    (?i)(?:https?|ftp)://[-a-z\d.]+/?(?!/)([-a-z\d+&@#%=~_|!:,.;]+/)*(?#去掉图片的URl)(?![-a-z\d+&@#%=~_!,.;].*?\.(?:jpg|jpeg|gif|png|bmp))[-a-z\d+&@#%=~_!,.;]*(?:\?[a-z\d+&@#/%=~_|!:,.;]*)?