下面我總結(jié)了關(guān)于在php開發(fā)中一些字符替換方法,包括不用正則直接替換或使用正則替換字符以及利用php自帶函數(shù)進(jìn)行替換.
比如有一個(gè)字符串:$a=’hello world hello pig hello cat hello dog hello small boy’;
然后想將第3次出現(xiàn)的hello 改變成為good-bye,比如:
‘hello world hello pig good-bye cat hello dog hello small boy’;
這樣的情況,我一時(shí)半會沒找到PHP的內(nèi)置函數(shù),而且在要求不能使用正則表達(dá)式的情況下,就編寫了這個(gè)簡易的小函數(shù),如果大家有好的內(nèi)置函數(shù)推薦,歡迎留言:)
實(shí)例代碼如下:
- /*
- * $text是輸入的文本;
- * $word是原來的字符串;
- * $cword是需要替換成為的字符串;
- * $pos是指$word在$text中第N次出現(xiàn)的位置,從1開始算起
- *
- */
- function changeNstr($text,$word,$cword,$pos=1){
- $text_array=explode($word,$text);
- $num=count($text_array)-1;
- if($pos>$num){
- return "the number is too big!or can not find the $word";
- }
- $result_str='';
- for($i=0;$i<=$num;$i++){
- if($i==$pos-1){
- $result_str.=$text_array[$i].$cword;
- }else{
- $result_str.=$text_array[$i].$word;
- }
- }
- return rtrim($result_str,$word);
- }
- $text='hello world hello pig hello cat hello dog hello small boy';
- $word='hello';
- $cword='good-bye';
- echo changeNstr($text,$word,$cword,3);
- //輸出:hello world hello pig good-bye cat hello dog hello small boy
- ?>
正則會更方法
如果是utf-8編碼的話
實(shí)例代碼如下:
- $regex = "/(,|,||||)/i";
- $test = "河北,石家莊,北京,上海|天津|||重慶|保定,,,河南, ";
- $result = preg_replace($regex," ",$test);
- print_r($result);
- ?>
結(jié)果
河北 石家莊 北京 上海 天津 重慶 保定 河南
php函數(shù)替換
PHP常用正則匹配函數(shù)間的區(qū)別,主要有str_replace、str_ireplace、substr_replace、preg_replace、preg_match、preg_match_all、preg_quote、preg_split、ereg_replace、eregi_replace、preg_replace、str_split,當(dāng)然其中有幾個(gè)不能使用正則表達(dá)式,但因?yàn)楦嚓P(guān)正則函數(shù)關(guān)系曖昧所以都放到一起比較一下
| 支持正則 | 特點(diǎn) | 備注 | |
| str_replace | X | 字符串替換函數(shù),大小寫敏感 | |
| str_ireplace | X | 字符串替換函數(shù),大小寫不敏感,支持?jǐn)?shù)組式批量替換 | 感謝網(wǎng)友franci,提醒添加 |
| substr_replace | X | 部分替換字符串函數(shù),可以指定位置index | |
| preg_replace | Y | 指定匹配模式進(jìn)行替換,支持子串引用 | 優(yōu)先使用 |
| ereg_replace | Y | 指定匹配模式進(jìn)行替換,大小寫敏感,支持子串引用 | |
| eregi_replace | Y | 指定匹配模式進(jìn)行替換,大小寫不敏感,支持子串引用 | |
| ereg | Y | 指定模式全文匹配,可以用來匹配判斷,或返回匹配數(shù)組 | |
| preg_match | Y | 指定模式匹配一次退出,可以用來是否匹配判斷,或使用返回的匹配數(shù)組 | 優(yōu)先使用 |
| preg_match_all | Y | 指定模式全文匹配,一般用來使用返回的匹配數(shù)組 | 優(yōu)先使用 |
| preg_split | Y | 指定匹配模式下正則剖分,如果能用最好還是使用explode或str_split | |
| str_split | X | 指定長度剖分字符串,默認(rèn)單個(gè)字符剖分成數(shù)組 | |
| explode | X | 可以指定單個(gè)或多個(gè)字符剖分字符串,成功則返回?cái)?shù)組,例如12345按照34剖分則返回12和5 | |
| preg_quote | - | 轉(zhuǎn)義正則表達(dá)式字符,意思就是為特殊字符加上反斜線,正則表達(dá)式的特殊字符包括:. + * ? [ ^ ] $ ( ) { } = ! < > | : - | |
新聞熱點(diǎn)
疑難解答