我想匹配url字符串中的查询参数,例如?foo=bar¶=val
。
我需要一个正则表达式模式,查看是否有foo
参数并返回它的值。如果没有匹配则返回空字符串
我尝试了这种模式:/(?:foo=([^&]+))?/
但它返回一个空匹配。如果我将其更改为/(foo=([^&]+))+/
预期结果:
?foo=myvalue&bar=bazz
应该返回myvalue
?bar=bazz
应该返回(empty string)
有什么想法吗?
答案 0 :(得分:1)
答案 1 :(得分:1)
虽然可以与正则表达式匹配,但为什么不使用parse_url
和parse_str
?
<?php
$url = 'http://domain.com?foo=bar&bar=foo&rab=oof&oof=rab';
parse_str(parse_url($url, PHP_URL_QUERY), $params);
if (!empty($params)) {
print_r($params);
/*
Array
(
[foo] => bar
[bar] => foo
[rab] => oof
[oof] => rab
)
*/
if (isset($params['foo'])) {
var_dump($params['foo']); // string(3) "bar"
}
}
答案 2 :(得分:0)
如果支持您的工具/语言,您可以尝试:
(?<=[?&]foo=)[^&]*