PHP では、文字列内の指定した文字を置換する場合、通常は str_replace 関数のように一度にすべて置換しますが、記事内のキーワードの置換など、最初に出現した文字だけを置換したい場合もあります。キャラが100人いると100回出現するのは無理です、ああ、数回だけ制限したいのですが、その実装方法を紹介します。
例
$str='これは文字列です。ABC は 1 回のみ置換し、次の ABC は置換しません。これを実現する方法はありますか? ';
最初の abc を xyz に置き換えます。置き換えられる文字列は固定されているため、多くの人は str_replace() 関数を使用して、この関数の使用が希望どおりであるかどうかを確認します。
str_replace( 混合 $search , 混合 $replace , 混合 $subject [, int &$count ] )
最後のパラメータは置換の総数を返すものであり、置換回数を指定するものではないため、str_replace() を使用するのは無理です。
preg_replace()は実装できますが、正規表現が使われているのが残念
コードは次のとおりです
コードをコピー |
|
$str=preg_replace('/abc/','abc',$str,1);
エコー $str;
| 例
@ の最初の 2 桁 (両端を含む) から始まり、4 桁以降を非表示としてメールを表示します
コードは次のとおりです
コードをコピー
|
|
関数 show_email_2($string){
$first = strpos($string, '@');
//var_dump($first);
if($first==1){
$string = '****'.$string;
}
If($first>1 && $first
$string = substr_replace($string,'****',0,$first-1);
}
If($first>5){
$string = substr_replace($string,'****',$first-5,4);
}
var_dump($string);
戻り $string;
}
//show_email_2('22@163.com') //出力-->****2@163.com
//show_email_2('22@22.com') //出力-->****2@22.com
Show_email_2('6123456@163.com'); //出力-->61****6@163.com
正規表現を使用しない方法はありますか?はい、次のようにすることができます
$replace='xyz';
if(($position=strpos($str,$replace))!==false){
$leng=strlen($replace);
$str=substr_replace($str,'abc',$position,$leng);
}
エコー $str;
指定した回数に交換したい場合は、以下の方法をご参照ください
コードは次のとおりです |
コードをコピー |
/*
* $text は入力テキストです
* $word は元の文字列です
* $cword は置換する必要がある文字列です
* $pos は、$text 内で $word が 1 から数えて N 回目に出現する位置を指します
* */
関数changeNstr($text,$word,$cword,$pos=1){
$text_array=explode($word,$text);
$num=count($text_array)-1;
if($pos>$num){
return "数値が大きすぎます!または $word が見つかりません";
}
$result_str='';
for($i=0;$i
if($i==$pos-1){
$result_str.=$text_array[$i].$cword
}その他{
$result_str.=$text_array[$i].$word;}
}
rtrim($result_str,$word)を返す
}
$text='こんにちは世界、こんにちは豚、こんにちは猫、こんにちは犬、こんにちは小さな男の子';
$word='こんにちは';
$cword='さようなら';
echo changeNstr($text,$word,$cword,3);
//出力: こんにちは、世界、こんにちは、豚、さようなら、猫、こんにちは、犬、こんにちは、小さな男の子
?>
例は理解しやすいので、詳しく知りたくない場合は、str_replace を使用するだけで済みます。
|
http://www.bkjia.com/PHPjc/631531.html
| www.bkjia.com
true
http://www.bkjia.com/PHPjc/631531.html
技術記事 PHPで文字列内の指定した文字を置換したい場合、通常はstr_replace関数などで一括置換しますが、記事内にキーワードがある場合は置換するなど、最初に出現した文字だけを置換したい場合もあります。 ..