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

PHP如何实现不区分大小写匹配且保留原大小写的字符串替换?

解决PHP中不区分大小写替换且保留原文本大小写的问题

刚好碰到过类似的需求!str_replace和str_ireplace确实满足不了这种既要不区分大小写匹配,又要保留原文本大小写格式的场景,这时候咱们可以用preg_replace_callback()来实现自定义替换逻辑。

核心思路

用正则表达式的i修饰符实现不区分大小写匹配,然后通过回调函数判断匹配到的文本的大小写样式,再把替换内容转换成对应的大小写格式,这样就能完美保留原字符串的格式了。

代码示例

假设你要把所有不区分大小写的"how"替换成"what",同时保留原词的大小写:

$originalStr = "Hello! How are you? And how about you? HOW do you do?";
$searchWord = "how";
$replaceWord = "what";

// 处理搜索词,转义正则特殊字符
$escapedSearch = preg_quote($searchWord, '/');

$resultStr = preg_replace_callback(
    // 匹配整个单词,不区分大小写
    "/\b{$escapedSearch}\b/i",
    function($matches) use ($replaceWord) {
        $matchedText = $matches[0];
        
        // 判断匹配文本的大小写类型
        if (strtoupper($matchedText) === $matchedText) {
            // 全大写,替换成全大写的目标词
            return strtoupper($replaceWord);
        } elseif (ucfirst($matchedText) === $matchedText && strtolower(substr($matchedText, 1)) === substr($matchedText, 1)) {
            // 首字母大写其余小写,替换成对应格式的目标词
            return ucfirst(strtolower($replaceWord));
        } else {
            // 全小写,替换成全小写的目标词
            return strtolower($replaceWord);
        }
    },
    $originalStr
);

echo $resultStr;

运行这段代码后,输出结果会是:

Hello! What are you? And what about you? WHAT do you do?

细节说明

  • preg_quote():用来转义搜索词中的正则特殊字符(比如.、*这些),避免正则表达式解析出错。
  • \b:单词边界,确保我们匹配的是完整的"how",而不是像"howdy"这类单词里的部分字符,如果不需要这个限制,可以去掉\b。
  • 回调函数里的判断逻辑:覆盖了全大写、首字母大写、全小写三种常见的大小写格式,基本能满足大部分场景的需求。如果你的替换需求更特殊(比如混合大小写的情况,比如"hOw"),可以再调整回调里的逻辑来适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:13:56