[PHP]-str_replaceは一回だけ交代します.

9911 ワード

ソース:http://www.ooso.net/archives/358
ログでこのような検索語を見ました.「php streamplace一回」です.ユーザーはphpをどう使うかを探しているかもしれません.replaceは対象文字列の内容を一回だけ置き換えて、全部置換するのではありません.これは小さいですが、面白い問題です.ちょうど前にも同じような処理をしました.その時はpregを直接利用しました.replaceが実現しました
mixed preg_replace(mixed pattern、mixed replace ment、mixed subject[、int limit])はsubjectでpatternモードのマッチング項目を検索してreplace mentに置き換えます.limitが指定されている場合は、limit個のマッチのみを置換し、limitまたはその値が−1である場合は、すべてのマッチ項目が置換されます.preg_のためにreplaceの4番目のパラメータは代替回数の制限を実現できるので、この問題はこのように処理するのに便利です.でもphp.netを見ています.strについては.replaceの関数についてコメントしたら、そこからもいくつかの代表的な関数が選び出されます.
strreplace.Onceの考えはまず、代替すべきキーワードの位置を見つけて、substrを利用します.replace関数を直接に置き換えます.

  
    
<? php
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 ) {
// Nothing found
return $haystack ;
}
return substr_replace ( $haystack , $replace , $pos , strlen ( $needle ));
}
?>
strreplace.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 );
}
?>