我有一个这样的字符串:
[<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]
我搜索了很多寻找解决方案但没有成功。
答案 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);
答案 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]