str_replace文字列を一度だけ置換する方法

1831 ワード

PHPではstrtr、strreplaceなどの関数を置き換えることができることはよく知られていますが、彼らは置き換えるたびにすべて置き換えることができます.例えば、「abcabbc」という文字列です.この文字列は上の関数を使ってその中のbを置き換えると、彼はすべて置き換えますが、1つか2つだけ交換したいならどうしますか.これはちょっと面白い問題で、ちょうど前にも似たような処理をしたことがあります.その時、私はpregを直接利用していました.replaceが実現した.
mixed preg_replace(mixed pattern,mixed replacement,mixed subject[,int limit])は、subjectでpatternモードの一致項目を検索し、replacementに置き換えます.limitが指定されている場合はlimit個の一致のみが置換され、limitが省略されている場合、またはその値が-1の場合、すべての一致項目が置換されます.preg_replaceの4番目のパラメータは置換回数の制限を実現できるので,この問題はこのように処理するのに便利である.でもphpを見ています.Netでstr_についてreplaceの関数コメントの後、そこから代表的な関数をいくつか選ぶこともできます.
str_replace_onceの考え方はまず置換するキーワードの位置を見つけてsubstrを利用することである.replace関数を直接置き換えます.
 
  

function str_replace_once($needle, $replace, $haystack) { 

// Looks for the first occurence of $needle in $haystack 

// and replaces it with $replace. 

$pos = strpos($haystack, $needle); 

if ($pos === false) { 

return $haystack; 

return substr_replace($haystack, $replace, $pos, strlen($needle)); 

?> 


str_replace_limitはpregを利用しますreplace、ただそのパラメータはpreg_に似ています.replaceになり、特定の特殊文字に対してエスケープ処理を行い、汎用性が向上しました.
 
  
 

function str_replace_limit($search, $replace, $subject, $limit=-1) { 

// constructing mask(s)... 

if (is_array($search)) { 

foreach ($search as $k=>$v) { 

$search[$k] = '`' . preg_quote($search[$k],'`') . '`'; 

}

else { 

$search = '`' . preg_quote($search,'`') . '`'; 

// replacement 

return preg_replace($search, $replace, $subject, $limit); 

?>