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

PHP:用另一字符串指定单词替换目标字符串占位符(区分大小写)

解决字符串占位符替换及大小写调整问题

嘿,这个需求我刚好处理过类似的,给你一个清晰的实现思路和代码示例:

首先我们得明确需求的核心规则:

  • 从$string1中按空格拆分出单词列表
  • 匹配$string2中的占位符,格式分为两种:
    • {WordN}或{Word N}:取第N个单词,首字母大写
    • {wordN}或{word N}:取第N个单词,首字母小写
  • 替换占位符为对应格式的单词,如果指定的单词不存在,保留原占位符

代码实现

$string1 = "Source for replace";
$string2 = "String {Word2} replace";

// 拆分第一个字符串为单词数组,先去除首尾空格避免空元素
$words = explode(' ', trim($string1));

// 使用正则回调替换占位符
$replacedString = preg_replace_callback(
    // 正则匹配两种占位符格式:Word/word 后跟数字,中间可带空格
    '/{(Word|word)(?:\s?)(\d+)}/',
    function($matches) use ($words) {
        $caseType = $matches[1];
        // 转换为数组索引(因为数组从0开始,所以数字减1)
        $wordIndex = (int)$matches[2] - 1;
        
        // 处理索引越界的情况,避免报错
        if (!isset($words[$wordIndex])) {
            return $matches[0];
        }
        
        $targetWord = $words[$wordIndex];
        // 根据占位符类型调整大小写
        return $caseType === 'Word' ? ucfirst($targetWord) : lcfirst($targetWord);
    },
    $string2
);

echo $replacedString; // 输出结果:String For replace

代码解释

  1. 拆分单词:用trim()去除$string1首尾的空格,再用explode(' ', ...)按空格拆分出单词数组,避免出现空元素。
  2. 正则匹配:正则表达式/{(Word|word)(?:\s?)(\d+)}/可以匹配{Word2}、{Word 2}、{word3}、{word 3}这些格式,同时捕获大小写类型和单词序号。
  3. 回调替换:在回调函数里,我们把序号转换成数组索引(减1),检查索引是否有效后,用ucfirst()或lcfirst()调整单词的首字母大小写,最后返回处理后的单词。
  4. 边界处理:如果占位符指定的序号超出了$string1的单词数量,会直接返回原占位符,避免出现错误。

测试其他场景

比如把$string2改成"First word: {word1}, Second word: {Word 2}, Third word: {word 3}",运行后会输出:
First word: source, Second word: For, Third word: replace

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:18:46