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

Тема в разделе "Регулярные выражения", создана пользователем zilon, 4 дек 2013.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. zilon

    zilon

    Регистр.:
    30 июл 2011
    Сообщения:
    370
    Симпатии:
    147
    подскажите пожалуста как регулярку составить есть вот такой код

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

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

    <li.*><a.*href="http://sait.ru".*><.*>название сайта</.*></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;

    }
     
    Последнее редактирование: 4 дек 2013
  2. xpert13

    xpert13 <(*_*)>

    Moderator
    Регистр.:
    7 ноя 2008
    Сообщения:
    182
    Симпатии:
    456
    Нормальные примеры текстов, на которых необходимо тестировать регулярку дайте.
     
  3. zilon

    zilon

    Регистр.:
    30 июл 2011
    Сообщения:
    370
    Симпатии:
    147
    вот

    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>
    а нужно чтоб она этого не делала...
     
    Последнее редактирование: 4 дек 2013
  4. xpert13

    xpert13 <(*_*)>

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

    zilon

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

    PHP:
    function zamenalik_category ($links)

    {

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

    }
     
Статус темы:
Закрыта.