$str = 'http://www.fyj.com/index.php?action=xxxx&name=fyj'; 
$pattern = "/(?<=action=).+?(?=&)/ims";
preg_match_all($pattern, $str, $matches);
print_r($matches);

解决方案 »

  1.   

    很帅地呀
    如果,&name=fyj不一定有呢,那正则的怎么改呀?
      

  2.   

    能顺便讲一下这个正则吗,例如?<=我就很不明白,你是如何刨去action=和&的
    谢谢
      

  3.   

    $str = 'http://www.fyj.com/index.php?action=xxxx&name=fyj http://www.fyj.com/index.php?action=yyyy'; 
    $pattern = "/(?<=action=).+?(?=&|$)/ims";
    preg_match_all($pattern, $str, $matches);
    print_r($matches);
    试下这个,(?=&|$)表示遇到&或字符串末尾终止。
      

  4.   

    (?<=action=)表示匹配action=后面的位置(只是一个位置而不是任何字符),(?=&)表示匹配&前面的位置,加上中间的.*?实际上就是匹配action=和&中间的字符了。当然也可以用/action=(.*?)&/这样的正则表达式,使用$matches[$i][1](结果数组的第一列)就可以了
      

  5.   

    抱歉说错,是$matches[1][$i]第一行