我面临着相当不寻常的情况
我将使用3种格式中的任何一种格式:
现在,我需要匹配像
这样的网址我怎样才能做到这一点?请帮忙
我知道我可以使用:
stristr('http://example.com/?p=12','http://example.com/?p=12&t=1')
但
时也会匹配http://example.com/?p=123 (as it matches p=12)
请帮帮我们。
答案 0 :(得分:2)
实现此目的的一种简单方法是使用PHP的parse_url()
和parse_str()
。
http://www.php.net/manual/en/function.parse-url.php
http://www.php.net/manual/en/function.parse-str.php
获取您的网址并通过parse_url()
运行它们,然后获取结果$result['query']
。通过parse_str()
运行这些,你最终会得到两个变量名及其值的关联数组。
基本上,如果$result['path']
匹配,并且两个$result['query']
中的任何键都包含相同的值,您将希望返回true。
代码示例:
function urlMatch($url1, $url2)
{
// parse the urls
$r1 = parse_url($url1);
$r2 = parse_url($url2);
// get the variables out of the queries
parse_str($r1['query'], $v1);
parse_str($r2['query'], $v2);
// match the domains and paths
if ($r1['host'] != $r2['host'] || $r1['path'] != $r2['path'])
return false;
// match the arrays
foreach ($v1 as $key => $value)
if (array_key_exists($key, $v2) && $value != $v2[$key])
return false;
// if we haven't returned already, then the queries match
return true;
}
答案 1 :(得分:0)
实现这一目标的一种非常快速(有点肮脏)的方法是通过以下正则表达式:
$regex = '#^' . preg_quote($url, '#') . '[?&$]#';
$url
是您需要搜索的网址。在上面,我们在匹配正则表达式的开头查找URL,然后是?
,&
或行尾锚点。这不是防弹但可能就足够了(@Mala already posted“正确”方法。
下面,我发布了example of use(和结果):
$urls = array(
'http://example.com/?p=12',
'http://example.com/a-b/',
'http://example.com/a.html'
);
$tests = array(
'http://example.com/?p=12&t=1',
'http://example.com/a-b/?t=1',
'http://example.com/a.html?t=1',
'http://example.com/?p=123'
);
foreach ($urls as $url) {
$regex = '#^' . preg_quote($url, '#') . '[?&$]#';
print $url . ' - ' . $regex . "\n";
foreach ($tests as $test) {
$match = preg_match($regex, $test);
print ' ' . ($match ? '+' : '-') . ' ' . $test . "\n";
}
}
结果:
http://example.com/?p=12 - #^http\://example\.com/\?p\=12[?&$]#
+ http://example.com/?p=12&t=1
- http://example.com/a-b/?t=1
- http://example.com/a.html?t=1
- http://example.com/?p=123
http://example.com/a-b/ - #^http\://example\.com/a-b/[?&$]#
- http://example.com/?p=12&t=1
+ http://example.com/a-b/?t=1
- http://example.com/a.html?t=1
- http://example.com/?p=123
http://example.com/a.html - #^http\://example\.com/a\.html[?&$]#
- http://example.com/?p=12&t=1
- http://example.com/a-b/?t=1
+ http://example.com/a.html?t=1
- http://example.com/?p=123