сложная регулярка для замены ссылок

Статус
В этой теме нельзя размещать новые ответы.

zilon

Постоялец
Регистрация
30 Июл 2011
Сообщения
370
Реакции
148
подскажите пожалуста как регулярку составить есть вот такой код

<li.*><a.*href=".*".*><.*>Ссылка из меню</.*></a>

надо его поменять на

<li.*><a.*href="Для просмотра ссылки Войди или Зарегистрируйся".*><.*>название сайта</.*></a>

то есть поменять надо только url и анкор ссылки, а все остальные атрибуты - class, id, target, <b>, <span> и другие надо сохранить...

я сложнее этого ничего не писал, подскажите пожалуста как это сделать :thenks:

PHP:
function zamenalink ($links)

{

    $links = preg_replace ('/href=\"\/?.*?">/', 'href="#">', $links);
    $links = preg_replace ("/href=\'\/?.*?'>/", "href='#'>", $links);
    $links = preg_replace ('/href=\"\/*?.html">/', 'href="#">', $links);
    $links = preg_replace ("/href=\'\/.*?.html'>/", "href='#'>", $links);

    return $links;

}
 
Последнее редактирование:

xpert13

<(*_*)>
Регистрация
7 Ноя 2008
Сообщения
182
Реакции
469
Нормальные примеры текстов, на которых необходимо тестировать регулярку дайте.
 

zilon

Постоялец
Регистрация
30 Июл 2011
Сообщения
370
Реакции
148
Нормальные примеры текстов, на которых необходимо тестировать регулярку дайте.

вот

HTML:
<li><a href="#">Главная</a></li>
<li><a href="#">Регистрация</a></li>
<li><a href="#">Контакты</a></li>
<li><a href="#">Правила</a></li>

<li class="sublnk"><a href="#"><b>Экономика</b></a>
<ul>
<li><a href="#"><b>Новости</b></a></li>
<li><a href="#"><b>Биржи</b></a></li>
<li><a href="#"><b>Котировки валют</b></a></li>
<li><a href="#"><b>Рынок</b></a></li>
</ul>
</li>

<li><a href="#"><b>Религия</b></a></li>
<li><a href="#"><b>Криминал</b></a></li>
<li><a href="#"><b>Спорт</b></a></li>
<li><a href="#"><b>Культура</b></a></li>
<li><a href="#"><b>Инопресса</b></a></li>

____________

сделал регулярку вот она

PHP:
function zamenalik_category ($links)

{

    $links = preg_replace ("/(<li><a.*?href=\").*?(<\/a><\/li>)/s", "$1/урл_ссылки/\">название_ссылки$2", $links);
    return $links;

}

меняет это на это

HTML:
<ul class="reset">
           <li><a href="/">Главная</a></li>
           <li><a href="#">Регистрация</a></li>
           <li><a href="#">Контакты</a></li>
           <li><a href="#">Правила</a></li>
</ul>

<ul class="reset">
           <li><a href="/урл_ссылки/">название_ссылки</a></li>
           <li><a href="/урл_ссылки/">название_ссылки</a></li>
           <li><a href="/урл_ссылки/">название_ссылки</a></li>
           <li><a href="/урл_ссылки/">название_ссылки</a></li>
</ul>

но вырезает слишком много, можно как не будь сделать так чтобы он не вырезала ссылки в которых есть символы {}[] и один слеш такой - / :nezn:

то есть сейцас регулярка меняет

HTML:
<li><a href="/">Главная</a></li>

на

HTML:
<li><a href="/урл_ссылки/">название_ссылки</a></li>

а нужно чтоб она этого не делала...
 
Последнее редактирование:

xpert13

<(*_*)>
Регистрация
7 Ноя 2008
Сообщения
182
Реакции
469
Код:
/(<li><a[^>]+href=")[^"{}\[\]/]*?("[^>]*>).*?(</a></li>)/i
$1/урл_ссылки/$2название_ссылки$3

Не проверял, но должно работать
 

zilon

Постоялец
Регистрация
30 Июл 2011
Сообщения
370
Реакции
148
большое спасибо, спецсимволы с кавычками зазеркалил и заработала :party:

PHP:
function zamenalik_category ($links)

{

$links = preg_replace ("/(<li><a[^>]+href=\")[^\"{}\[\]\/]*?(\"[^>]*>).*?(<\/a><\/li>)/i", "$1/урл_ссылки/$2название_ссылки$3", $links);
return $links;

}
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху