0

I'd like to find the common pattern between 2 URLs in PHP. I've played around with https://gist.github.com/chrisbloom7/1021218 but that stops at the point of finding the longest match not accounting for wildcards that exist in URLs.

e.g. here are 2 URLs

If I run the function over these, my common pattern is

http://example.com/collections/

What I'm looking for is

http://example.com/collections/*/products/

Does anyone know how I can adapt the code to make it work or is there a better way?

illmatic
  • 43
  • 1
  • 8

1 Answers1

1

Instead of regex, split the urls on / then compare each elements of array then recompose the 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";

Output:

http://example.com/collections/*/products
Toto
  • 89,455
  • 62
  • 89
  • 125
  • Wonderful! Made a small adjustment to compare index pages that aren't explicitly included in the URL such as http://example.com/collections/dresses http://example.com/collections/shoes if (substr($out, -1) != "\*") { $out = $out . "/*"; } – illmatic Jan 24 '17 at 16:05