将url与查询字符串匹配

时间:2011-10-03 09:35:06

标签: php url

我需要一段基本上可以匹配URL的代码。我在下面列出了2个场景,以明确我需要的东西。

匹配URL可能/可能不包含子目录,因此有2种情况。

http://example.com/?pgid=1
http://example.com/?pgid=1&opt2=2
http://example.com/?opt2=2&pgid=1
http://example.com/?pgid=1&opt2=2&opt3=3
http://example.com/?opt2=2&pgid=1&opt3=3
http://example.com/?opt2=2&opt3=3&pgid=1

should match => http://example.com/?pgid=1

http://example.com/sub-dir/?pgid=1
http://example.com/sub-dir/?pgid=1&opt2=2
http://example.com/sub-dir/?opt2=2&pgid=1
http://example.com/sub-dir/?pgid=1&opt2=2&opt3=3
http://example.com/sub-dir/?opt2=2&pgid=1&opt3=3
http://example.com/sub-dir/?opt2=2&opt3=3&pgid=1

should match => http://example.com/sub-dir/?pgid=1

如何实现上述目标,帮助升值。感谢。

3 个答案:

答案 0 :(得分:0)

匹配该网址的正则表达式为:\?pgid=1$

据我所知,您不希望网址中包含任何其他查询字符串参数。

答案 1 :(得分:0)

我想你的意思是这样的:

$input = array('http://example.com/?pgid=1',
               'http://example.com/?pgid=1&opt2=2',
               'http://example.com/?opt2=2&opt3=3&pgid=1',
               'http://example.com/sub-dir/?opt2=2&opt3=3&pgid=1');


foreach($input as $i){

    $url = parse_url($i);
    echo $url['scheme'].'://'.$url['host'].$url['path'];
    parse_str($url['query'],$query);
    echo 'pgid='.$query['pgid'];
    echo '<br/>';

}

显然,您应该根据个人需求进行调整,但这显示了如何提取pgid并使用该参数重建网址。

之后你可以进行匹配,可能只需使用$query['pgid']或者使用全新的网址。

答案 2 :(得分:0)

您可以使用parse_urlparse_str

$url = parse_url('http://example.com/?pgid=1&opt2=2&opt3=3');
$against = parse_url('http://example.com/?pgid=1');

$folder = $url['path'];
$query = parse_str($url['query']);
$pgidout = $pgid;
$query = parse_str($against['query']);


if(($url['path'] == $against['path']) && ($pgid == $pgidout)){
    echo "matched";
} else {
    echo "not matched";
}