За последние 24 часа нас посетили 16927 программистов и 1296 роботов. Сейчас ищут 1397 программистов ...

Отделить внешние ссылки от внутренних.

Тема в разделе "Регулярные выражения", создана пользователем Sedg, 1 июл 2019.

  1. Sedg

    Sedg Новичок

    С нами с:
    1 июл 2019
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте!
    Задача довольно популярная, но не смог найти нигде готового решения (сам удивляюсь).
    Надо отделить внешние ссылки от внутренних и первые обличить в noindex.
    Особенности внутренних ссылок, они содержат свое доменное имя, либо не содержат доменного имени вообще.
    Ниже рабочий код, который только определяет ссылки по доменному имени, и оборачивает в noindex, сокращенные внутренние ссылки и якоря.
    Прошу вашей помощи в доработке регулярного выражения.

    Код (Text):
    1. <?php
    2. $text = 'ffef <a href="https://www.flashboot.ru/index.php">ссылка 1 с заменой</a>
    3. <a href="http://forum.htmlbook.ru">ссылка 2 с заменой</a> текст текст
    4. <a href="http://moysite.ru/bbb/aaa/ggg.html">моя ссылка без замены</a> kf kf kf<br />
    5. текст <a href="/index.php">внутренняя ссылка</a><br />
    6. <a href="#p1">ссылка на якорь</a> ё моё';
    7.  
    8. $regex = '%(<a\shref="(?!https?://moysite\.ru))(.*?</a>)%i';
    9. $replacement = '<noindex><a rel="nofollow" href="$2</noindex>';
    10. $result = preg_replace($regex, $replacement, $text);
    11. echo $result;
    12. ?>
     
  2. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    PHP:
    1. <?php
    2.  
    3. $text = 'ffef <a href="https://www.flashboot.ru/index.php">ссылка 1 с заменой</a>
    4. <a href="http://forum.htmlbook.ru">ссылка 2 с заменой</a> текст текст
    5. <a href="http://moysite.ru/bbb/aaa/ggg.html">моя ссылка без замены</a> kf kf kf<br />
    6. текст <a href="/index.php">внутренняя ссылка</a><br />
    7. <a href="#p1">ссылка на якорь</a> ё моё';
    8. //$regex = '%(<a\shref="(?!https?://moysite\.ru))(.*?</a>)%i';
    9.  
    10. $regex = '/<a .*(https?:\/\/(?!moysite\.ru).*<\/a>)/i';
    11. $replacement = '<noindex><a rel="nofollow" href="$1</noindex>';
    12. $result = preg_replace($regex, $replacement, $text);
    13. echo $result;
     
  3. Sedg

    Sedg Новичок

    С нами с:
    1 июл 2019
    Сообщения:
    2
    Симпатии:
    0
    Это магия!!! Заменили несколько символов и вуа-ля.
    ОГРОМНОЕ спасибо!!!!!!!