Выручайте! Мозг под вечер уже не работает. В коде: HTML: <a href="/page1.html"> Текст1 </a> <a href="/page2.html" rel="nofollow"> Текст2 </a> <a href="/page3.html"> Текст3 </a> Необходимо удалить вторую ссылку, оставив первую и третью. Пытаюсь сделать это кодом: PHP: $file=preg_replace("/<a.*?[^>].*?rel=[\"|\']nofollow[\"|\'].*?>.*?<\/a>/is", "", $file); Но регулярка "ловит" выражение начиная с <a первой ссылки и заканчивая </a> второй ссылки. Проверяю в этой песочнице. Подскажите как удалить только вторую ссылку, содержащую rel="nofollow". Заранее благодарю! ПС: Ссылки могут быть разные, содержать стили, другие данные. Цель удалить любую ссылку с rel="nofollow".
Код (Text): $file = '<a href="/page1.html"> Текст1 </a> <a href="/page2.html" rel="nofollow"> Текст2 </a> <a href="/page3.html"> Текст3 </a>'; preg_match_all("/<[Aa][\s]{1}[^>]*[Hh][Rr][Ee][Ff][^=]*=[ '\"\s]*([^ \"'>\s#]+)[^>]*[Rr][Ee][Ll][^=]*=[\"\']nofollow[\"\']>/", $file, $matches); var_dump($matches);
@kazadai90, ого!!!))) Не совсем то, что мне надо. Дело в том, что в тэге <a> могут быть еще разные штуки: id, class, style, пробелы и т.д. Куда их воткнет программист не известно. Но это наверное моя ошибка, надо было это сразу указать. Но спасибо, что помогли найти мой косяк. Регулярка Код (Text): /<a[^>]*rel=[\"|\']nofollow[\"|\'].*?>.*?<|\/a>/is вполне подходит. Да, и модификатор i прикольная штука. Рекомендую)
Код (Text): $file = preg_replace('#<a\s[^>]*rel\s*=\s*["\']?nofollow.+?</a>#is', '', $file); Или Код (Text): $doc = new DOMDocument; $doc->loadHTML($file); $xpath = new DOMXpath($doc); foreach ($xpath->query('//a[@rel="nofollow"]') as $a) { $a->parentNode->removeChild($a); } $file = $doc->saveHTML();
@Emilien Такую ссылку ваша регулярка не возьмет: HTML: <a class="sdf" rel="nofollow" href="/page2.html" > Текст2 </a> Но вы правы, до и после равно действительно могут быть пробелы. Это работает: Код (Text): #<a[^>]*rel\s*=\s*[\"|\']nofollow[\"|\'].*?>.*?</a>#is
С чего вдруг? Там всё нормально с такой ссылкой https://rextester.com/WUH25198 Ну и в [\"|\'] нет смысла ставить |