2012-05-16 93 views
2

我有一個示例代碼:在php中使用str_replace時出錯?

$text = "abc ABC def ghi Abc aBc xyz"; 
$search = "abc" 
$string = str_replace(" ".trim($search)." ", 'DEF', $text); 
echo $string; 

而且結果是: 「abc ABC def ghi DEF aBc xyz」 //只有美國廣播公司改變

但究竟結果是: 「abc DEF def ghi DEF DEF xyz

如何解決呢?

回答

2

可以使用:

$regex = '/(\s)'.trim($search).'(\s)/i'; 
preg_match_all($regex, $text, $tmp3) 
0

您需要嘗試不區分大小寫的字符串替換。 str_ireplace在PHP http://codepad.org/atBbj8Kp

<?php 
    $text = "abc ABC def ghi Abc aBc xyz"; 
    $search = "abc"; 
    $string = str_replace(" ".trim($search)." ", 'DEF', $text); 
    echo $string; 
    echo PHP_EOL; 
    $string = str_ireplace(" ".trim($search)." ", 'DEF', $text); 
    echo $string; 
?> 
0

預期的結果居然是:

abc DEF def ghi DEF DEF xyz 

有第一 'ABC' 不會與搜索字符串的空間相匹配。

0

我認爲這是你在找什麼?基本上它使用不區分大小寫的搜索並替換str_ireplace

<?php 
$text = 'abc ABC def ghi Abc aBc xyz'; 
$search = 'abc'; 
$string = str_ireplace(trim($search), 'DEF', $text); 
echo $string; 
?> 

輸出:DEF DEF def ghi DEF DEF xyz

1

您可以使用str_ireplace(不區分大小寫str_replace)3倍的abc

<?php 
$text = "abc ABC def ghi Abc aBc xyz"; 
$search = "abc"; 
$string = str_ireplace(' ' . trim($search), ' DEF', $text); 
$string = str_ireplace(' ' . trim($search) . ' ', ' DEF ', $text); 
$string = str_ireplace(trim($search) . ' ', 'DEF ', $text); 
echo $string; 

3個變種或者你可以使用正則表達式:

$text = "abc ABC def ghi Abc aBc xyz"; 
$search = "abc"; 
$string = preg_replace("/(\s*)abc(\s*)/i", '$1DEF$2', $text); 
echo $string; 
0

str_replace函數如果您想執行不區分大小寫的查找和替換操作,那麼這是您的任務的錯誤工具。

嘗試例如這樣的:

$string = stri_replace(trim($search), 'DEF', $text) 

OR

$string = preg_replace('@\b' . trim($search) . '\[email protected]', 'DEF', $text); 

如果問題多餘的空格是防止部分匹配 - 你想要的preg_replace版本,除非你不在乎它將找不到/替換第一個/最後一個字符串

0
$string = str_ireplace($search , 'DEF', $text); 

輸出:

DEF DEF def ghi DEF DEF xyz 
如果要修剪更換輸出

$string = str_ireplace($search, 'DEF', $text); 
$string = str_ireplace(" DEF ", 'DEF', $string); 

出認沽:

DEFDEFdef ghiDEFDEF xyz