preg_replace для изменения ссылки

Silencer_SPB

Новичок
preg_replace для изменения ссылки

Сутки вожусь. Ну не получаются у меня регэкспы :)
Исходный:
Код:
http://oscrel5/default.php?cPath=3_10&sort=2a&page=1&action=buy_now
либо
Код:
http://oscrel5/default.php?cPath=3_10
либо
Код:
http://oscrel5/en/default.php?cPath=3_10&sort=2a&page=1&action=buy_now
либо
Код:
http://oscrel5/en/default.php?cPath=3_10
на выходе надо:
Код:
http://oscrel5/category3_10/имяфайла?остальныепараметры
либо соостветственно
Код:
http:/oscrel5/en/category3_10/имяфайла?остальные параметры
PS: Парсится html, то есть все строки в кавычках, если это чем то помогает.
 

Georgy

Guest
Код:
$path = 'category3_10/';
$string = 'http://oscrel5/en/default.php?cPath=3_10&sort=2a&page=1&action=buy_now';
$string = preg_replace( '|^([url]http://[/url])([^/]{1,})(/?.*?/)([^?]{1,})(\?.*)$|i', '\\1\\2\\3' . $path . '\\4\\5', $string ); // proto, host, ? folder, file, query_string
print $string;
 

Silencer_SPB

Новичок
Боюсь некорректно спросил.
Значение cPath нефиксированное, все время разно.
И парситья не одна строчка, а вся страница сразу. Во всей и надо поменять.
 

Georgy

Guest
Код:
$string = 'http://oscrel5.ru/my_category/default.php?cPath=3_10&sort=2a&page=1&action=buy_now';

preg_match ( '|(.*?)cPath=([^&]{1,})&(.*)|i', $string, $match );


$cpath = $match[2];
$string = $match[1] . $match[3];
$path = 'category' . $cpath . '/';

$string = preg_replace( '|^([url]http://[/url])([^/]{1,})(/?.*?/)([^?]{1,})(\?.*)$|i', '\\1\\2\\3' . $path . '\\4\\5', $string ); // proto, host, ? folder, file, query_string

print '<PRE>';
print "$string";
print '</PRE>';
use [m]preg_match_all[/m]
 
Сверху