Замена ссылки (регулярным выражением)

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

Ответить
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Пытаюсь заменить ссылку такого некрасивого типа
<a target="_blank" href="123.php" id="id">
но вот беда, немогу отучить от жадности захватывает лишнее и в добавок интереснее перестановку местами делает.
Пока сделал криво, дабы иметь хоть что-то..

Код: Выделить всё

 
$s = preg_replace('/<a(.*?)href="(.*?)"[ ]{0,1}/i', '<a href="../\\2" \\1', $s);
 
isms.ru
Сообщения: 48
Зарегистрирован: 11 янв 2007, 16:45

Задача не ясна. Напиши подробнее.
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Нужно заменить ссылку и выполнить перестановку

имеем:
<a target="_blank" href="123.php" id="id">

резултат:
<a href="../123.php" target="_blank" id="id">
isms.ru
Сообщения: 48
Зарегистрирован: 11 янв 2007, 16:45

Хм, а какие данные переменные? Имя файла, ИД? есть ли лишние пробелы...
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Заменить нужно только ссылку в идеале захватить можно с href= до пробела, я конкретно не смог отучить от жадности отбирал по href=" и тут весь прикол если следом есть еще что либо, то обходит -"- id="id"--цепляет здесь - естественно захватывая все остальное>
isms.ru
Сообщения: 48
Зарегистрирован: 11 янв 2007, 16:45

На перле выглядело бы так (примерно) :-)

s/<a target="_blank" href="(\d+?).php" id="id">/<a href="../$1.php" target="_blank" id="id">/gs;

:-)
Знак ? - убирает жадность, т.е. ищет до первого вхождения. Кстати, здесь и он не нужен. А вот если ссылка не только цифры, тогда нужен и имеем (.+?)

Вроде так.
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Хм, у меня не в жадности проблема была, вобщем сделал вот ряд того что я использовал, может кому понадобится..

Код: Выделить всё

//заменяет ссылки с дополнением
$xcontent  = preg_replace('/src="(.*?)"[ ]{0,1}/i', 'src="../../\\1" s_rc="../../\\1" ', $xcontent);
$xcontent  = preg_replace('/href="(.*?)"[ ]{0,1}/i', 'href="\\1" h_ref="\\1" ', $xcontent );
//Просто удаляет ссылки из результата
$xcontent = preg_replace('/src="(.*?)"[ ]{0,1}/i', '', $xcontent);
$xcontent = str_replace('s_rc="../../', 'src="', $xcontent);
$xcontent = preg_replace('/href="(.*?)"[ ]{0,1}/i', '', $xcontent);
$xcontent = str_replace('h_ref="', 'href="', $xcontent);
//Удаляет ссылки не соответствующие условию src=" , ссылка остается если flash к примеру (embed не обрабатывается) 
$xcontent = preg_replace('/src=[^"](.*?)[^ ]+[ ]{0,1}/i', '', $xcontent);
 
Подсказка - работал я с iframe, а он переписывает пути на полные, в условиях редактора на другом подуровне нежели отображаемая страница нужно было отобразить картинки с сохранением пути и после работы удалить темповую ссылку оставив натуральную вот от сюда и доп s_rc=".
Всем успеха..
Ответить