Страница 1 из 1
Замена ссылки (регулярным выражением)
Добавлено: 03 мар 2007, 23:19
Duncon
Пытаюсь заменить ссылку такого некрасивого типа
<a target="_blank" href="123.php" id="id">
но вот беда, немогу отучить от жадности захватывает лишнее и в добавок интереснее перестановку местами делает.
Пока сделал криво, дабы иметь хоть что-то..
Код: Выделить всё
$s = preg_replace('/<a(.*?)href="(.*?)"[ ]{0,1}/i', '<a href="../\\2" \\1', $s);
Re: Замена ссылки (регулярным выражением)
Добавлено: 05 мар 2007, 13:57
isms.ru
Задача не ясна. Напиши подробнее.
Re: Замена ссылки (регулярным выражением)
Добавлено: 06 мар 2007, 09:03
Duncon
Нужно заменить ссылку и выполнить перестановку
имеем:
<a target="_blank" href="123.php" id="id">
резултат:
<a href="../123.php" target="_blank" id="id">
Re: Замена ссылки (регулярным выражением)
Добавлено: 06 мар 2007, 17:03
isms.ru
Хм, а какие данные переменные? Имя файла, ИД? есть ли лишние пробелы...
Re: Замена ссылки (регулярным выражением)
Добавлено: 06 мар 2007, 17:43
Duncon
Заменить нужно только ссылку в идеале захватить можно с href= до пробела, я конкретно не смог отучить от жадности отбирал по href=" и тут весь прикол если следом есть еще что либо, то обходит -"- id="id"--цепляет здесь - естественно захватывая все остальное>
Re: Замена ссылки (регулярным выражением)
Добавлено: 07 мар 2007, 08:21
isms.ru
На перле выглядело бы так (примерно) :-)
s/<a target="_blank" href="(\d+?).php" id="id">/<a href="../$1.php" target="_blank" id="id">/gs;
:-)
Знак ? - убирает жадность, т.е. ищет до первого вхождения. Кстати, здесь и он не нужен. А вот если ссылка не только цифры, тогда нужен и имеем (.+?)
Вроде так.
Re: Замена ссылки (регулярным выражением)
Добавлено: 07 мар 2007, 13:28
Duncon
Хм, у меня не в жадности проблема была, вобщем сделал вот ряд того что я использовал, может кому понадобится..
Код: Выделить всё
//заменяет ссылки с дополнением
$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=".
Всем успеха..