You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现HTML转BBcode时如何避免替换pre标签内的内容

实现方案

直接利用PHP正则的(*SKIP)(*FAIL)特性即可实现,该特性可以标记指定匹配段跳过不处理,修改后的代码如下:

<?php
$str="
<b>test</b>
<pre>
<b>test</b>
</pre>
<b>test</b>
";
function htmltobb($str){
    // 匹配pre标签段直接跳过,剩余内容替换b标签为bbcode格式
    $pattern = '/(<pre>.*?<\/pre>)(*SKIP)(*FAIL)|<(\/?)b>/is';
    return preg_replace($pattern, '[$2b]', $str);
}
echo htmltobb($str);
?>

代码说明

  • 正则参数i代表不区分大小写,可同时匹配<B>、<b>等不同写法的标签
  • 正则参数s代表让.匹配换行符,确保多行内容的pre标签可以被完整识别
  • (*SKIP)(*FAIL)组合会让匹配到的pre标签段不参与后续替换逻辑,仅处理pre外的内容
    运行后输出结果完全符合预期,pre标签内部的<b>、</b>不会被替换。

内容的提问来源于stack exchange,提问作者DCYılmaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:27:01