如何用PHP正则仅替换{card}括号内的;;为;,不改动外部的;;
解决方案
你可以用preg_replace_callback实现精准替换,先匹配所有{card}(...)格式的片段,仅对括号内部的内容做替换操作,不会修改括号外的;;。
实现代码
// 原始字符串 $string = ';{card}(Secrets of Dark Magic);;{card}(Secrets of Dark Magic);;{card}(Secrets of Dark Magic);;{card}(Secrets of Dark Magic;;Called by the Grave);;{card}(Secrets of Dark Magic;;Called by the Grave;;Secrets of Dark Magic)'; // 处理逻辑 $string = preg_replace_callback('/{card}\((.*?)\)/', function ($matches) { // 仅替换括号内的;;为; $processedInner = str_replace(';;', ';', $matches[1]); return "{card}({$processedInner})"; }, $string); // 输出结果 echo $string;
原理解释
- 正则
/{card}\((.*?)\)/用非贪婪匹配.*?精准捕获每个{card}对应的括号内的所有内容,不会跨括号匹配 - 回调函数中只对捕获到的括号内内容做
;;到;的替换,括号外的原有字符完全保留
处理后输出的结果和你需要的目标格式完全一致。
内容的提问来源于stack exchange,提问作者Tanker
相关产品推荐
相关产品推荐

