如何找到 2 个网址之间的共同模式
How can I find a common pattern between 2 urls
我想找到 PHP 中 2 个 URL 之间的共同模式。
我玩过 https://gist.github.com/chrisbloom7/1021218 但在找到最长匹配点时停止,不考虑 URL 中存在的通配符。
例如这里有 2 个网址
- http://example.com/collections/dresses/products/dress.html
- http://example.com/collections/shoes/products/shoe.html
如果我运行这些函数,我的常用模式是
http://example.com/collections/
我要找的是
http://example.com/collections/*/products/
有谁知道我如何调整代码以使其工作或有更好的方法吗?
而不是正则表达式,在 /
上拆分 url,然后比较数组的每个元素,然后重组 url:
$url1 = 'http://example.com/collections/dresses/products/foo/dress.html';
$url2 = 'http://example.com/collections/shoes/products/shoe.html';
$part1 = explode('/', $url1);
$part2 = explode('/', $url2);
$common = array();
$len = count($part1);
if (count($part2) < $len) $len = count($part2);
for ($i = 0; $i < $len-1; $i++) {
if ($part1[$i] == $part2[$i]) {
$common[] = $part1[$i];
} else {
$common[] = '*';
}
}
$out = implode('/', $common);
echo "$out\n";
输出:
http://example.com/collections/*/products
我想找到 PHP 中 2 个 URL 之间的共同模式。 我玩过 https://gist.github.com/chrisbloom7/1021218 但在找到最长匹配点时停止,不考虑 URL 中存在的通配符。
例如这里有 2 个网址
- http://example.com/collections/dresses/products/dress.html
- http://example.com/collections/shoes/products/shoe.html
如果我运行这些函数,我的常用模式是
http://example.com/collections/
我要找的是
http://example.com/collections/*/products/
有谁知道我如何调整代码以使其工作或有更好的方法吗?
而不是正则表达式,在 /
上拆分 url,然后比较数组的每个元素,然后重组 url:
$url1 = 'http://example.com/collections/dresses/products/foo/dress.html';
$url2 = 'http://example.com/collections/shoes/products/shoe.html';
$part1 = explode('/', $url1);
$part2 = explode('/', $url2);
$common = array();
$len = count($part1);
if (count($part2) < $len) $len = count($part2);
for ($i = 0; $i < $len-1; $i++) {
if ($part1[$i] == $part2[$i]) {
$common[] = $part1[$i];
} else {
$common[] = '*';
}
}
$out = implode('/', $common);
echo "$out\n";
输出:
http://example.com/collections/*/products