这样试试:(\"GET \/)|(\"POST \/)(^\.gif)(HTTP\/1.0\")|(HTTP\/1.1\")

解决方案 »

  1.   

    关键就在于,不能把".gif"排除掉,难!难!难!
      

  2.   

    ^(\"GET /|\"POST /)(?!\.gif)*(HTTP/1\.0\"|HTTP/1\.1\")$
      

  3.   

    ^(\"GET /|\"POST /)(?!\.gif)*(HTTP\/1\.0\"|HTTP\/1\.1\")$
    少了两个,呵呵。。
      

  4.   

    <?php
    $s = <<< TEXT
    211.136.23.7    -       -       050605235909    0       "GET /wawama/private/games/dixiaducheng/duchenglunpan/lunpan_result.jsp?val=100&choice
    =36&game_type=3&wsid=1117986021741204 HTTP/1.0" 200     1019    "-"     "MOT-E680/R51_G_0F.51.A1P MIB/2.2 Profile/MIDP-2.0 Configuration/CLDC-
    1.1"    "13637630308"   "wap.wawama.com"
    TEXT;
    preg_match_all("/\"(?:GET|POST) .+ HTTP\/1\.[01]/isU", $s, $ar);
    print_r($ar[0]);
    ?>
    然后遍历$ar[0]删去含有".gif"的元素
      

  5.   

    这样
    ^(\"GET /|\"POST /)(?!\.gif)*(HTTP\/1\.0\"|HTTP\/1\.1\")$
    应该是对的。但是执行出错,关键就在于,不能把".gif"排除掉。
    文档上说这样(^\.gif)可以只排除.gif,可是不知道为什么不行。
      

  6.   

    上面说错了,是(?!\.gif)可以只排除.gif,但是为什么不行?
      

  7.   


    preg_replace_callback("/\"(?:GET|POST).*(\.gif)?.*(HTTP\/1\.0\"|HTTP\/1\.1\")/isU","stripe_gif",$text);function stripe_gif($matches) {
        return $matches[1].$matches[3];
      }不知道合不合您的要求??
      

  8.   

    或者:
    function stripe_gif($matches) {
        return $matches[1].$matches[2].$matches[4].$matches[5];
      }
    preg_replace_callback("/\"(?:GET|POST)(.*)(\.gif)?(.*)(HTTP\/1\.0\"|HTTP\/1\.1\")/isU","stripe_gif",$text);
      

  9.   

    其实我现在也遇到了这个问题,间接解决的方法很麻烦,而且影响速度!
    我只能回家k书了,不知道perl有没有解决的办法,建议楼主去其他perl的子论坛求解!!
    书到用时方恨少啊!!!!  :(