PHP中仅替换以a结尾单词内的a为o的实现问题
解决方法
要实现仅替换以a结尾的单词内所有a为o的需求,不能直接用str_replace(它会全局替换所有a),可以用以下两种方式实现:
方法一:分割单词逐个处理
先把字符串按空格拆成单个单词,遍历每个单词判断是否以a结尾,是就替换该单词内的所有a,最后再拼接回去:
<?php $str = "kak kaka"; $words = explode(' ', $str); $result = []; foreach ($words as $word) { // 判断单词是否以a结尾 if (substr($word, -1) === 'a') { $result[] = str_replace('a', 'o', $word); } else { $result[] = $word; } } $res = implode(' ', $result); print_r($res); // 输出:kak koko ?>
方法二:正则回调替换
用preg_replace_callback匹配所有以a结尾的单词,再在回调函数里替换单词内的a:
<?php $str = "kak kaka"; $res = preg_replace_callback('/\b(\w+a)\b/', function($matches) { // 替换匹配到的单词里的所有a为o return str_replace('a', 'o', $matches[1]); }, $str); print_r($res); // 输出:kak koko ?>
这里的正则/\b(\w+a)\b/:
\b表示单词边界,确保匹配的是完整单词\w+匹配单词的主体部分(字母、数字、下划线)a匹配单词结尾的a
内容的提问来源于stack exchange,提问作者Daromat Sirlari
相关产品推荐
相关产品推荐

