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

PHP中使用preg_replace移除字符串中所有FONT标签的问题

解决PHP中清除所有FONT标签的正则问题

你遇到的问题根源在于正则表达式的贪婪匹配特性!咱们一步步拆解下为啥原代码会得到不符合预期的结果:

你的原正则是/\[FONT=(.*)\](.*)/,这里的(.*)是贪婪模式,它会尽可能匹配最长的字符串。第一个(.*)会直接“吞掉”从第一个[FONT=到整个字符串里最后一个]之间的所有内容——也就是arial]Dit is een tekst [FONT=Courier New这一大段,剩下的第二个(.*)自然就只有nonononon了,所以替换后只留下了这部分。

要搞定这个问题,咱们需要做两个关键调整:

  1. 让正则能精准匹配单个[FONT=...]标签,而不是一次性匹配到最后一个标签
  2. 开启全局替换,确保所有FONT标签都被清除

下面给你两种简洁可靠的解决方案:

方案一:使用非贪婪匹配

把正则里的.*改成.*?(非贪婪模式),它会匹配到第一个]就停止,再加上全局修饰符/g,就能逐个清除所有FONT标签:

$old = '[FONT=arial]Dit is een tekst [FONT=Courier New]nonononon';
$new = preg_replace('/\[FONT=(.*?)\]/', '', $old);
echo "\nold = $old\nnew = $new\n";

方案二:用字符集限定匹配范围(更高效)

直接匹配]之外的字符,避免正则回溯,性能更优,同样加上全局替换:

$old = '[FONT=arial]Dit is een tekst [FONT=Courier New]nonononon';
$new = preg_replace('/\[FONT=[^\]]+\]/', '', $old);
echo "\nold = $old\nnew = $new\n";

运行任意一种代码,都会得到你期望的结果:

old = [FONT=arial]Dit is een tekst [FONT=Courier New]nonononon
new = Dit is een tekst nonononon

内容的提问来源于stack exchange,提问作者Bas van den Dikkenberg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:01:46