如何删除方括号[]内的HTML标签?

时间:2015-05-10 08:24:24

标签: php regex preg-replace shortcode

我有一个这样的字符串:

[<span style="font-size: 12.1599998474121px; line-height: 15.8079996109009px;">heading </span>heading="h1"]Its a <span style="text-decoration: line-through;">subject</span>.[/<span style="font-size: 12.1599998474121px; line-height: 15.8079996109009px;">heading</span>]

我想使用PHP preg_replace等删除括号内的HTML标记。最终字符串应如下所示:

[heading heading="h1"]Its a <span style="text-decoration: line-through;">subject</span>.[/heading]

我搜索了很多寻找解决方案但没有成功。

4 个答案:

答案 0 :(得分:1)

这应该适合你:

在这里,我只需在字符串的每个括号中使用strip_tags()并将其返回。

echo $str = preg_replace_callback("/\[(.*?)\]/", function($m){
    return strip_tags($m[0]);
}, $str);

答案 1 :(得分:1)

您可以将callback与以下正则表达式一起使用,并使用strip_tags() ...

$str = preg_replace_callback('~\[[^]]*]~', 
     function($m) {
        return strip_tags($m[0]);
     }, $str);

eval.in

答案 2 :(得分:0)

取决于你想删除多少。

示例:

Pattern: '<.*?>'
Result: [heading heading="h1"]Its a subject.[/heading]

但从你的答案判断,你想保留标题内的html标签。根据具体的规则,我不明白?为什么这是一个例外?

答案 3 :(得分:0)

您可以使用单个正则表达式来获得所需内容:

$re = "#][^\[\]]*(*SKIP)(*F)|<\/?[a-z].*?>#si"; 
$str = "[<span style=\"font-size: 12.1599998474121px; line-height: 15.8079996109009px;\">heading </span>heading=\"h1\"]Its a <span style=\"text-decoration: line-through;\">subject</span>.[/<span style=\"font-size: 12.1599998474121px; line-height: 15.8079996109009px;\">heading</span>]"; 
$result = preg_replace($re, '', $str);
echo $result;

sample code的输出:

[heading heading="h1"]Its a <span style="text-decoration: line-through;">subject</span>.[/heading]