Я интересно в удалении всего текста в следующие теги:Удалить весь текст в пределах конкретных тегов
<p class="wp-caption-text">Remove this text</p>
Может кто-нибудь дать мне представление о том, как это можно сделать в PHP?
Большое спасибо
Я интересно в удалении всего текста в следующие теги:Удалить весь текст в пределах конкретных тегов
<p class="wp-caption-text">Remove this text</p>
Может кто-нибудь дать мне представление о том, как это можно сделать в PHP?
Большое спасибо
Избавьтесь от тега и содержания внутри него:
$content = preg_replace('/<p\sclass=\"wp\-caption\-text\">[^<]+<\/p>/i', '', $content);
или если вы хотите сохранить тег:
$content = preg_replace('/(<p\sclass=\"wp\-caption\-text\">)[^<]+(<\/p>)/i', '$1$2', $content);
Работал как шарм. Спасибо, куча – Levi
@levi Не проблема! –
, если его всегда тот же тег, вы можете просто искать строку. используйте позицию, которая приведет к подстроке от нее к закрывающей метке. Или вы можете использовать регулярное выражение, здесь есть хорошие, которые могут вам помочь.
Можете ли вы привести пример кода, как я мог это сделать, поскольку я очень неопытен с php – Levi
Попробуйте это:
$string = '<p class="wp-caption-text">Remove this text</p>';
$pattern = '/(.*<p .*>).*(<\/p>.*)/';
$replacement = '$1$2';
echo preg_replace($pattern, $replacement, $string);
Этот REGEXP не будет работать, если строка представляет собой целую веб-страницу. Ваш. * Между вашими тэгами будет хватать как можно больше для всей страницы, пока не найдет самую последнюю страницу на странице. –
Как бита альтернатива более высокого уровня для регулярных выражений.
Вы можете обрабатывать DOM. Вы можете сопоставить все узлы, которые вы ищете, с XPath //p[@class="wp-caption-text"]
.
Например:
$doc = new DOMDocument();
$doc->loadHTML($yourHTMLasString);
$xpath = new DOMXPath($doc);
$query = '//p[@class="wp-caption-text"]';
$entries = $xpath->query($query);
foreach ($entries as $entry) {
$entry->textContent = '';
}
echo $doc->saveHTML();
Мне тоже нравится это решение. Просто помните, что и это, и регулярное выражение имеют большой объем накладных расходов при увеличении размера документа. Я бы рекомендовал только выполнить эти операции один раз и сохранить вывод в кеш, который будет зарезервирован без обработки. –
@Geofferey: true, для очень больших файлов я бы рекомендовал переписать выше логику на XSLT и запустить ее с помощью процессора SAX XSLT. – vartec
Вы хотите сохранить метку и удалить текст или удалить весь элемент? –
Возможный дубликат [Regex - Захват определенного слова в пределах определенных тегов] (http://stackoverflow.com/questions/3332619/regex-grab-a-specific-word-within-specific-tags) и, по крайней мере, несколько еще дюжина. Используйте [парсер DOM] (http://stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662), и решение будет одинаковым для любого «Fetch text content для' '" –
Gordon
Я на самом деле не поклонник любого из этих ответов, чтобы быть полностью честным. Хотя хорошие патчи они не являются решениями. Единственное реальное решение проходит через код и удаляет места, которые генерируют этот контент для начала. В противном случае у вас есть одно время для создания процесса, создающего контент, и один тратить время на удаление контента. –