Извращенные URLы

Категория: PHP , RegEx Комментариев: 0

Как-то раз в ходе разработки парсера одного сервиса столкнулся с довольно извращенной задачей обработки URL'ов на странице.
Итак, имеется некоторая переменная, содержащая ряд URL-адресов вида
$urls = "

http://site.ru/?url=http://othersite1.ru/some_page.htm

http://site.ru/?url=http://othersite2.ru/some_page.htm

http://site.ru/?url=http://othersite3.ru/some_page.htm

";
Программа-максимум:
1. Заменить у URLов, содержащих текст othersite1.ru или othersite2.ru http://site.ru/?url= на goto.php?
2. У URLов, не подошедших под первое условие оставить только то, что идет после url=

Решить задачу применением нескольких регулярных выражений, конечно, легко:
$urls=preg_replace("/http:\/\/(.*?(othersite1|othersite2)\.ru.*?\r\n)/","./goto.php?http://\\1",$urls);
$urls=preg_replace("/http:\/\/site\.ru.*?\r\n)/","",$urls);

Но неплохо-бы выполнить это все одним выражением.

Товарищ DECIDE предложил следующее решение:
$replaces="othersite1|othersite2";
$urls=preg_replace("/http(.*?)((&url=.*?($replaces))|&url=)(.*?)\r\n/e","('\\2'!='&url='?'./goto.php?http\\1\\2\\5':'\\5').'\r\n'",$urls);
echo str_replace("\r\n","<br>",$urls);

Как-бы не выглядело сие чудо, работает оно как часы!

Остались вопросы? Задавайте, не задавайте, а как работает это выражение я сам не понимаю...

Автор: Кто-то   @   3 апреля 2009 Комментариев: 0
Метки : ,

Поблагодарить автора

Webmoney Z163628999150, R617151845974

Комментариев: 0

Комментариев к этой записи поке нет. Ваш комментарий будет первым.
оставить комментарий

Предыдущая запись
«
Следующая запись
»