正则表达式从PHP中的URL中提取查询字符串参数值

时间:2011-10-24 18:04:53

标签: php preg-match

我需要从网址中提取商品ID;这种模式就是这样    & R = 10031004&,我的意思是,我需要在& R =和其他&

中提取字符串

这是我到目前为止所做的,但我一直都会遇到错误。

preg_match('^[&R=]+ &$',
"http://www.lapdirecciondemario.com/items.php&R=10031004&", $matches);
$host = $matches[0];

echo $host;

7 个答案:

答案 0 :(得分:1)

使用此:

preg_match('/&R\=(.*?)&/i', "http://www.lapdirecciondemario.com/items.php&R=10031004&", $matches);
echo $matches[1]; // will echo 10031004

答案 1 :(得分:0)

preg_match('#R=([0-9]+)#is', "http://www.lapdirecciondemario.com/items.php&R=10031004&", $matches);
echo $matches[1]; # 10031004

答案 2 :(得分:0)

首先,我可以简化你的任务,

这是脚本中的网址吗?

然后你应该检查$ _GET的内容,你会找到一个内容为10031004的变量R ...

$item_id = $_GET['R']; 
echo $item_id; 

答案 3 :(得分:0)

if (preg_match('/(?<=&R=).*?(?=&)/', "http://www.lapdirecciondemario.com/items.php&R=10031004&", $regs)) {
    $result = $regs[0];
}

使用这个。

答案 4 :(得分:0)

$url = 'http://www.lapdirecciondemario.com/items.php&R=10031004&';
preg_match('/(&|\?)R=([0-9]+)/i', $url, $matches);
echo $matches[2];

与其他答案相比,如果参数R前面有?而不是&,则此匹配也会匹配。如果您对该号码的长度有更多了解,可以使用+替换[0-9]之后的{min,max}

这个正则表达式应该非常健壮并且匹配所有这些:

答案 5 :(得分:0)

我不妨再骗你了。这个将匹配R =之前的任何字符?或者&amp;并以&amp;结尾或#。

preg_match('/[?&]R=([^&#]+)/', "http://www.lapdirecciondemario.com/items.php&R=10031004&", $matches);

答案 6 :(得分:0)

$url = "http://www.lapdirecciondemario.com/items.php&R=10031004&";
$urlQueryParts = array();
parse_str(parse_url($url, PHP_URL_QUERY), $urlQueryParts);
if(isset($urlQueryParts[ "R" ]))
    $urlQueryParts[ "R" ];

我无法测试它,但它应该工作。