我已获得以下代码:
if (preg_match('/fl=(.*)&/', $resp, $matches)) {
$temp=$matches[0];
$fl= str_replace("fl=", '',$temp);
}
我希望$resp
之后的fl=
以及下一个&
之前的文字
我遇到的问题是它忽略了前几个&'s
。
我目前得到的输出是Email&errorType=format&"
我想要的是Email
答案 0 :(得分:1)
您需要使用延迟匹配.*?
或否定字符类[^&]*
。
$resp = "/fl=123&gh=word&more=params";
if (preg_match('/fl=(.*?)&/', $resp, $matches)) {
$fl=$matches[1];
echo $fl;
}
请参阅IDEONE demo
请注意,.*
太贪心,这意味着它尽可能多地匹配字符串右侧的字符。之所以如此,是因为正则表达式引擎将整个子字符串抓取到最后一个&
,然后回溯以发现它实际上可以捕获整个子字符串。使用.*?
,我们会得到最接近的&
。