2011-02-16 64 views
1

E.g從PHP中的字符串中刪除特殊字符串的最好和最快的方法?

$stringOriginal = "C D E F G H I J K L M N"; 

$stringRemove = "E F M"; 

而且我想刪除從$ stringOriginal $ stringRemove串!所以,我可以得到

$result = "C D G H I J K L N"; 

非常感謝您!

+3

難道這些總是會信嗎?還是這些詞? (如果這不是安全風險,我想我要求提供真實數據),因爲有很多選項可以實現這一點。 – 2011-02-16 14:52:51

回答

3

非浸漬方法

$stringOriginal = "C D E F G H I J K L M N"; 
$stringRemove = "E F M"; 

$removals = explode(' ',$stringRemove); 
$result = str_replace($removals,'',$stringOriginal); 
$result = str_replace(' ',' ',$result); 
+1

這得到我給予好評,其他的答案是簡單地列出一個`str_replace()函數調用`要麼是不清楚或平出錯誤。 – BoltClock 2011-02-16 14:57:19

+0

@ BoltClock/@ MarkBaker:除非這些令牌和`$ needle`是另一個標記。 – 2011-02-16 14:59:49

+0

最後你用一個空格替換雙空格。在多次移除的情況下,這將無濟於事。一個遞歸的解決方案可以幫助,但恕我直言,這不再是優雅的。 – s3v3n 2011-02-16 15:02:55

1
$result= str_replace($stringRemove, "", $stringOriginal); 

但是那麼你的$ stringRemove將是array('E', 'F', 'M');而不是你正在使用的格式。

1

使用的preg_replace:

//no spaces needed in the filter 'E F M' should be 'EFM' for this function 
function specialFilter($body, $filter) { 
    return preg_replace("/[$filter]/", '', $body); 
} 

//example usage 
$filteredMessage = specialFilter('C D E F G H I J K L M N', 'EFM'); 

//if double spaces are not allowed after the filtered elements are removed run this 
$filteredMessage = str_replace(' ', ' ', $filteredMessage); 

見:preg_replace & str_replace

1

這裏是我會做什麼:

echo implode(' ', str_replace(explode(' ', $stringRemove), '', explode(' ', $stringOriginal))); 

這將返回 「CDGHIJKLN」,所以你仍然要檢查錯誤的空間(這很容易)。

0

每個人都好像是用str_replace函數,但我擔心的是,有令牌和值可以嵌套在另一個值內。也許我錯了,這是矯枉過正,但解決兩種方式:

$stringOriginal = "C D E F G H I J K L M N"; 
$stringRemove = "E F M"; 

var_dump(implode(' ',array_diff(explode(' ',$stringOriginal),explode(' ',$stringRemove)))); 

結果:

string(17) "C D G H I J K L N" 
2

假設什麼比什麼在你的問題提供了更多的,我最初以爲會是使用preg_replace並查找這些字符(帶有可選的空格):

$stringOriginal = "C D E F G H I J K L M N"; 
print preg_replace('/(E|F|M)\s+?/', '', $stringOriginal); 

,輸出:C D G H I J K L N

相關問題