繁体   English   中英

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

[英]regular expression to extract a query string parameter value from a URL in PHP

我需要从URL中提取项目ID; 模式是&R = 10031004&,我的意思是,我需要提取&R =中的字符串,而其他&

到目前为止,这是我所拥有的,但是我一直在出错。

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

echo $host;

用这个:

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

首先,也许我可以简化您的任务,

这是脚本中的网址吗?

那么您应该检查$ _GET的内容,您将在其中找到包含内容10031004的变量R ...

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

使用这个。

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

与其他答案相反,如果参数R前面带有? ,则这也将匹配? 而不是& 如果您知道更多有关数字长度的信息,可以将{min,max} [0-9] {min,max}之后的[0-9]之后的+替换为。

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

我不妨再嘲笑你。 该字符将与R前面的R =之间的任何字符匹配。 或&,并以&或#结尾。

preg_match('/[?&]R=([^&#]+)/', "http://www.lapdirecciondemario.com/items.php&R=10031004&", $matches);
$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" ];

我无法测试,但应该可以。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM