我需要更换一个字母的每一次出现a,o,i,e,u与[aoieu]?
我试图做到以下几点:
str_replace(array('a', 'o', 'i', 'e', 'u'), '[aoieu]?', $input);
Run Code Online (Sandbox Code Playgroud)
但是当给予它输入black而不是给我预期bl[aoieu]?ck它给了我
bl[a[ao[aoi[aoie[aoieu]?]?[aoieu]?]?[aoie[aoieu]?]?[aoieu]?]?[aoi[aoie[aoieu]?]?[aoieu]?]?[aoie[aoieu]?]?[aoieu]?]?ck
Run Code Online (Sandbox Code Playgroud)
如何才能让它不能替换已经更换过的东西?
您可以考虑为此使用正则表达式,或者您可以创建自己的函数,一次遍历字符串一个字母。这是一个正则表达式解决方案:
preg_replace('/[aoieu]/', '[aoieu]?', $input);
Run Code Online (Sandbox Code Playgroud)
或者您自己的函数(请注意,$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');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1586 次 |
| 最近记录: |