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

PHP正则问题:如何删除单引号间文本且避免过度匹配丢失内容?

解决正则替换时丢失中间内容的问题

嘿,这个问题我太熟了!你遇到的是正则表达式里贪婪匹配的经典坑~

为什么你的代码会丢失"ccc"?

你写的正则#\'.+\'#里,.+是贪婪匹配模式——它会尽可能多地匹配字符。所以从第一个'开始,它会一路匹配到最后一个'才停下,直接把'bbb'ccc'ddd''eee'这整段内容都替换成空了,结果自然就只剩aaafff啦。

两种正确的解决方案

方案1:使用非贪婪匹配

把.+改成.+?,让正则尽可能少地匹配字符,遇到下一个'就停止:

$txt1 = "aaa'bbb'ccc'ddd''eee'fff";
$txt2 = preg_replace('#\'.+?\'#', "", $txt1);
echo $txt2; // 输出:aaacccfff

方案2:使用精确字符集匹配(更高效)

用[^']+匹配所有不是单引号的字符,这种方式不需要回溯,性能比非贪婪模式更好:

$txt1 = "aaa'bbb'ccc'ddd''eee'fff";
$txt2 = preg_replace('#\'[^\']+\'#', "", $txt1);
echo $txt2; // 同样输出:aaacccfff

这两种方法都能精准匹配每一对单引号之间的内容,把它们替换为空后,就能得到你想要的aaacccfff啦~

内容的提问来源于stack exchange,提问作者leiopar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:47:33