我正在寻找一种在PHP中搜索字符串的方法,并删除"<pre"
,"</pre>"
以及介于两者之间的所有内容。
示例:
$string = 'Hello, I am a little text. <pre class="foo">This should be deleted.</pre> This is fine again.';
// Some magic function
$newString = 'Hello, I am a little text. This is fine again.';
有什么办法吗?如果我使用strip_tags()
,则只删除标记,但现在删除标记内的内容。
非常感谢!
答案 0 :(得分:4)
如果它只是一个小字符串,我不推荐它,但正则表达式会在这里好。
$newString = preg_replace('~<pre[^>]*>[^<]*</pre>~', '', $str);
但是,在处理HTML / XML时,我总是使用DOM。
$doc = new DOMDocument;
$doc->loadHTML($html);
foreach ($doc->getElementsByTagName('pre') as $tag) {
$tag->parentNode->removeChild($tag);
}
答案 1 :(得分:3)
我使用下面(或上面)的@hwnd解析示例,比使用正则表达式更安全。
您可以使用以下内容:
/<(.*?)(\h*).*?>(.*?)<\/\1>/
演示:https://regex101.com/r/cN9rL4/3
PHP演示:https://eval.in/415470
echo preg_replace('/<(.*?)(\h*).*?>(.*?)<\/\1>/s', '', 'Hello, I am a little text. <pre class="foo">This should be deleted.</pre> This is fine again.');
输出:
您好,我是一个小文字。这很好。
修改:添加s
修饰符以防内容超过一行,演示失败https://regex101.com/r/cN9rL4/2。
另请注意,这不是pre
特有的,这将替换它遇到的任何元素。