首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP Regex删除<pre></pre>代码块中的HTML标记

PHP Regex删除<pre></pre>代码块中的HTML标记
EN

Stack Overflow用户
提问于 2020-09-18 09:38:21
回答 1查看 355关注 0票数 1

我有一个复杂的HTML代码字符串,其中包含了几个预标记,其中包含了代码(例如python),并且还使用了应该删除的HTML标记进行修饰。

例如:

代码语言:javascript
复制
Some text.
<pre>
a = 5 <br/>
b = 3
</pre>
More text
<pre>
a2 = "<a href='something'>text</a>"
b = 3
</pre>
final text

我想清除所有的HTML标签(这些可能是基本标签,br,em,div,a等等)。我不需要解析HTML,我知道regex cannot parse html

代码语言:javascript
复制
Some text.
<pre>
a = 5
b = 3
</pre>
More text
<pre>
a2 = "text"
b = 3
</pre>
final text

我想使用PHP (使用类似于preg_replace的东西)来完成这个任务。例如:

代码语言:javascript
复制
$html = "<html><head></head><body><div><pre class=\"some-css-class\">
         <p><strong>
         some_code = 1
         </p></strong>
         </pre></div></body>"; // Compacting things here, for brevity

$newHTML = preg_replace("/(.*?)<pre[^<>]*>(.*?)<\/pre>(.*)/Us", "$1".strip_tags("$2", '<p><a><strong>')."$3", $html);
echo $newHTML;

这个示例代码显然不起作用,因为:(1)它只适用于一个预标记,(2)代码strip_tags("$2", '<p><a><strong>')显然不能工作,因为它没有在正确的位置处理字符串(它只返回"$2“,而不是获取文本并正确地操作它)。

对于如何在PHP中做到这一点,有什么建议吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-18 10:07:25

您需要在回调体中使用preg_replace_callback并调用strip_tags

代码语言:javascript
复制
preg_replace_callback('~(<pre[^>]*>)([\s\S]*?)(</pre>)~',
function ($m) { return $m[1] . strip_tags($m[2], ['p', 'b', 'strong']) . $m[3]; },
$s);
代码语言:javascript
复制
Some text.
<pre>
a = 5
b = 3
</pre>
More text
<pre>
a2 = "text"
b = 3
</pre>
final text

请注意,上面的strip_tags删除除pbstrong以外的所有标记。

RegEx详细信息:

  • (<pre[^>]*>):匹配#1
  • ([\s\S]*?):匹配0或更多字符(包括换行符)中的<pre...>和捕获,在组$2中捕获。[\s\S]匹配任何字符,包括newline.
  • (</pre>):匹配</pre>和第3组

中的捕获。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63953206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档