Мне нужно удалить теги привязки из некоторого текста и, похоже, не может это сделать с помощью regex.
Просто привязанные теги, а не их содержимое.
Например, <a href="http://www.google.com/" target="_blank">google</a>
станет google
.
Точно, это не может быть сделано правильно, используя регулярное выражение.
Вот пример использования DOM:
$xml = new DOMDocument(); $xml->loadHTML($html); $links = $xml->getElementsByTagName('a'); //Loop through each <a> tags and replace them by their text content for ($i = $links->length - 1; $i >= 0; $i--) { $linkNode = $links->item($i); $lnkText = $linkNode->textContent; $newTxtNode = $xml->createTextNode($lnkText); $linkNode->parentNode->replaceChild($newTxtNode, $linkNode); }
Важно, чтобы в DOM делались изменения в обратном направлении.
Затем вы можете попробовать
preg_replace('/<\/?a[^>]*>/','',$Source);
Я попробовал его здесь здесь, на рублевом
Вы ищете strip_tags()
.
<?php // outputs 'google' echo strip_tags('<a href="http://www.google.com/" target="_blank">google</a>');
На этот вопрос уже был дан ответ, но я подумал, что добавлю свое решение в микс. Мне это нравится лучше, чем принятое решение, потому что это немного больше.
$content = preg_replace(array('"<a href(.*?)>"', '"</a>"'), array('',''), $content);
с использованием регулярного выражения:
preg_replace('/<a[^>]+>([^<]+)<\/a>/i','\1',$html);
Попробуйте:
$str = '<p>paragraph</p><a href="http://www.google.com/" target="_blank" title="<>">google -> foo</a><div>In the div</div>'; // first, extract anchor tag preg_match("~<a .*?</a>~", $str, $match); // then strip the HTML tags echo strip_tags($match[0]),"\n";
вывод:
google -> foo
Значительная часть регулярного выражения здесь мне не помогла. Некоторые из них удаляют содержимое внутри якоря (что совсем не то, о чем попросил ОП), а не весь контент в нем, некоторые из них будут соответствовать любому тегу, начинающемуся с a и т. Д.
Это то, что я создал для своих нужд на работе. У нас возникла проблема, когда передача HTML в wkhtmltopdf, которая содержала метки привязки (со многими атрибутами данных и другими атрибутами), иногда мешала созданию PDF-файла, поэтому я хотел удалить их, сохраняя текст.
Regex:
/ </? а ([^>] *)?> / ig
В PHP вы можете:
$text = "<a href='http://www.google.com/'>Google1</a><br>" . "<a>Google2</a><br>" . "<afaketag href='http://www.google.com'>Google2</afaketag><br>" . "<afaketag>Google4</afaketag><br>" . "<a href='http://www.google.com'><img src='someimage.jpg'></a>"; echo preg_replace("/<\/?a( [^>]*)?>/i", "", $text);
Выходы:
Google1<br>Google2<br><afaketag href='http://www.google.com'>Google2</afaketag><br><afaketag>Google4</afaketag><br><img src='someimage.jpg'>