preg_replace获取url的一部分

时间:2014-01-20 19:24:06

标签: http url preg-replace

我正在使用 ereg_replace

$myurl="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$theid= ereg_replace("[^0-9]", "", $myurl);

要在输入网址的末尾获取ID

我想使用 preg_replace 并完成获取两种类型的ID

一个看起来像http:// site.com?id=64

像我上面那样

但我想得到一个包含http:// site.com?pick=7878787

我正在尝试将pick id分配给一个名为$ thepickupcode

的变量

和另一个名为$ theid

的变量

我很高兴的任何帮助。

3 个答案:

答案 0 :(得分:1)

非正则表达方式:

$res = parse_url($myurl);
parse_str($res['query'], $query);
$theid = $query['id'];
$thepickupcode = $query['pick'];

正则表达方式:

if (preg_match('~(?<=[?&])(id|pick)=([0-9]++)(?=&|$)~', $_SERVER['REQUEST_URI'], $match))
    if ($match[1] == 'id') $theid = $match[2];
    else $thepickupcode = $match[2];

答案 1 :(得分:0)

你的问题不明确,但我认为你想要的是:

然后你想要preg_match,而不是替换。

preg_match( '~(pick|id)=(.+)~i', $myurl, $res );
print_r( $res );

我不确定所有可能性是什么,但这可能更合适:

preg_match( '~\?(pick|id)=([0-9]+)$~i', $myurl, $res );
print_r( $res );

答案 2 :(得分:0)

如果要将ereg...更改为preg...,则必须将正则表达式括在分隔符中。
以你的例子:

$theid= ereg_replace("[^0-9]", "", $myurl);

变为:

$theid = preg_replace("/[^0-9]/", "", $myurl);

$theid = preg_replace("/\D+/", "", $myurl);

但如果有其他数字而不是id,这会给你错误的结果。

我建议你关注@CasimiretHippolyte的回答。