php正则表达式找到匹配

时间:2015-08-05 09:37:57

标签: php regex

我已获得以下代码:

if (preg_match('/fl=(.*)&/', $resp, $matches)) {
    $temp=$matches[0];
    $fl= str_replace("fl=", '',$temp);
   }

我希望$resp之后的fl=以及下一个&之前的文字

我遇到的问题是它忽略了前几​​个&'s。 我目前得到的输出是Email&errorType=format&"我想要的是Email

1 个答案:

答案 0 :(得分:1)

您需要使用延迟匹配.*?或否定字符类[^&]*

$resp = "/fl=123&gh=word&more=params";
if (preg_match('/fl=(.*?)&/', $resp, $matches)) {
    $fl=$matches[1];
    echo $fl;
   }

请参阅IDEONE demo

请注意,.*贪心,这意味着它尽可能多地匹配字符串右侧的字符。之所以如此,是因为正则表达式引擎将整个子字符串抓取到最后一个&,然后回溯以发现它实际上可以捕获整个子字符串。使用.*?,我们会得到最接近的&