очень быстро (и несколько грязный) способ добиться этого с помощью следующего регулярного выражения:
$regex = '#^' . preg_quote($url, '#') . '[?&$]#';
Где $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
@ IM-JM, существуют четкие и краткие примеры на справочных страницах, которые Мала связаны между собой. – Charles
@ I-M-JM, я написал вам функцию, которая делает то, что я думаю, что вам нужно - она сравнивает домены, пути, а затем убедитесь, что любые переменные, которые определены в * обеих цепочках запросов, должны быть равны. – Mala
Функция urlMatch была весьма полезной, спасибо –