PHP使用str_replace误替换单词内部子串 如何仅替换独立匹配单词
PHP整词替换问题解决方案
问题原因
str_replace 属于普通字符串匹配替换,只要内容中出现对应子串就会触发替换,不会识别子串是否为独立完整单词,因此你代码中会把category内部包含的cat也替换为CCC,导致输出不符合预期。
解决方法
使用PHP的正则替换函数preg_replace,结合正则单词边界符\b限制匹配范围,仅匹配独立完整的单词。
为了避免搜索词中包含正则特殊字符导致解析错误,需要先用preg_quote对搜索词做转义处理。
修改后代码
$text = "My cat in my category"; $searchVal = array("cat", "dog", "fish"); $replaceVal = array("CCC", "DDD", "FFF"); // 生成带整词匹配规则的正则表达式数组 $matchPatterns = array_map(function($keyword) { return '/\b' . preg_quote($keyword, '/') . '\b/'; }, $searchVal); $strtext = preg_replace($matchPatterns, $replaceVal, $text); echo $strtext; // 输出结果:My CCC in my category
内容的提问来源于stack exchange,提问作者ramin
相关产品推荐
相关产品推荐

