PHP中如何用正则匹配被$包裹的词汇并替换为双$包裹的形式
解决方案
你可以用带捕获组的正则匹配实现替换,PHP下正确写法如下:
// 适用场景:$包裹内容不含空白 preg_replace('/\$(\S+?)\$/', '\$\$$1\$\$', $text); // 如果$包裹内容允许包含空白,用以下写法 preg_replace('/\$(.+?)\$/', '\$\$$1\$\$', $text); // 替换参数用单引号包裹时可以简化写法: preg_replace('/\$(\S+?)\$/', '$$$1$$', $text);
代码说明
- 正则里的
()是捕获组,会把两个$中间匹配到的内容存入$1变量 - 双引号包裹替换参数时,
\$是转义后的字面量$,\$\$$1\$\$拼接后就是$$+ 捕获到的原内容 +$$ - 非贪婪匹配符
?用于避免多个$对出现时匹配范围过大的问题
测试示例
$text = "The \$girl\$ is a \$good\$ person"; $result = preg_replace('/\$(\S+?)\$/', '\$\$$1\$\$', $text); echo $result; // 输出结果:The $$girl$$ is a $$good$$ person
内容的提问来源于stack exchange,提问作者Daenny
相关产品推荐
相关产品推荐

