我需要用a
替换字母o
,i
,e
,u
,[aoieu]?
之一的每次出现
我尝试执行以下操作:
str_replace(array('a', 'o', 'i', 'e', 'u'), '[aoieu]?', $input);
但是当给它输入
black
而不是给我期望的bl[aoieu]?ck
时,它给了我bl[a[ao[aoi[aoie[aoieu]?]?[aoieu]?]?[aoie[aoieu]?]?[aoieu]?]?[aoi[aoie[aoieu]?]?[aoieu]?]?[aoie[aoieu]?]?[aoieu]?]?ck
我如何才能不替换已经替换的东西?
最佳答案
您可以考虑为此使用正则表达式,或者可以使自己的函数一次遍历字符串一个字母。这是一个正则表达式解决方案:
preg_replace('/[aoieu]/', '[aoieu]?', $input);
或您自己的函数(请注意,
$search
只能是单个字符或字符数组,而不是字符串-您可以使用strpos
或类似的代码来构建也可以处理更长字符串的字符串):function safe_replace($search, $replace, $subject) {
if(!is_array($search)) {
$search = array($search);
}
$result = '';
$len = strlen($subject);
for($i = 0; $i < $len; $i++) {
$c = $subject[$i];
if(in_array($c, $search)) {
$c = $replace;
}
$result .= $c;
}
return $result;
}
//Used like this:
safe_replace(array('a', 'o', 'i', 'e', 'u'), '[aoieu]?', 'black');