Здравствуйте! Задача довольно популярная, но не смог найти нигде готового решения (сам удивляюсь). Надо отделить внешние ссылки от внутренних и первые обличить в noindex. Особенности внутренних ссылок, они содержат свое доменное имя, либо не содержат доменного имени вообще. Ниже рабочий код, который только определяет ссылки по доменному имени, и оборачивает в noindex, сокращенные внутренние ссылки и якоря. Прошу вашей помощи в доработке регулярного выражения. Код (Text): <?php $text = 'ffef <a href="https://www.flashboot.ru/index.php">ссылка 1 с заменой</a> <a href="http://forum.htmlbook.ru">ссылка 2 с заменой</a> текст текст <a href="http://moysite.ru/bbb/aaa/ggg.html">моя ссылка без замены</a> kf kf kf<br /> текст <a href="/index.php">внутренняя ссылка</a><br /> <a href="#p1">ссылка на якорь</a> ё моё'; $regex = '%(<a\shref="(?!https?://moysite\.ru))(.*?</a>)%i'; $replacement = '<noindex><a rel="nofollow" href="$2</noindex>'; $result = preg_replace($regex, $replacement, $text); echo $result; ?>
PHP: <?php $text = 'ffef <a href="https://www.flashboot.ru/index.php">ссылка 1 с заменой</a> <a href="http://forum.htmlbook.ru">ссылка 2 с заменой</a> текст текст <a href="http://moysite.ru/bbb/aaa/ggg.html">моя ссылка без замены</a> kf kf kf<br /> текст <a href="/index.php">внутренняя ссылка</a><br /> <a href="#p1">ссылка на якорь</a> ё моё'; //$regex = '%(<a\shref="(?!https?://moysite\.ru))(.*?</a>)%i'; $regex = '/<a .*(https?:\/\/(?!moysite\.ru).*<\/a>)/i'; $replacement = '<noindex><a rel="nofollow" href="$1</noindex>'; $result = preg_replace($regex, $replacement, $text); echo $result;