2014-04-28 43 views
0

在數據字符串中使用特定的分隔符時,通常我想在分解之前剪掉它的最後一個實例。修整整個字符串而不是使用帶字符的trim()

我一直想知道這一點:

PHP trim()將剪掉的空白,或某些字符。但是,如果我想修剪滿弦,像這樣:

$data = 'cookieDELIMITERchocolateDELIMITER'; 
$data = trim($data, 'DELIMITER'); 

上面不會有真正的工作,因爲它不會修剪字符串「分隔符」,而是修剪字符「d,E, L,I,M,T,R」。

我想是這樣的:

$data = 'cookieDELIMITERchocolate'; 

我感謝您的建議!

回答

2
$data = 'cookieDELIMITERchocolateDELIMITER'; 
$data = preg_replace('/^(DELIMITER)*|(DELIMITER)*$/', '', $data); 

var_dump($data); 
// string(24) "cookieDELIMITERchocolate" 

正則表達式^(DELIMITER)*|(DELIMITER)*$將匹配0+ 「分隔符」 在一個字符串或(|)的字符串的末尾($)的開始(^)的(*)實例。 preg_replace()將採取這些匹配並用空白字符串替換它們。


完整的regex說明

^    # Matches the start of the string 
    (DELIMITER)* # Matches "DELIMITER" 0+ times, thanks to the * 
|    # OR 
    (DELIMITER)* # Matches "DELIMITER" 0+ times, thanks to the * 
$    # Matches the end of the string 

這意味着它要麼在開頭或字符串的結尾匹配許多分隔符。由於preg_replace()執行全局匹配/替換,只要它們連接到字符串的開頭或結尾,它就會獲得所有出現的DELIMITER。

添加點(^(DELIMITER).*|(DELIMITER)*$)將匹配字符串的開頭,後跟DELIMITER,後跟任意字符的0+(.匹配全部)。如果它從DELIMITER開始,這將有效地replace the entire string

+0

聽起來不錯,只是添加了點吧? '^(DELIMITER)。* |(DELIMITER)* $'http://regex101.com/r/wJ6vR5 –

+0

@Chris nope,它應該是很好的 - 看到更新。 – Sam

+1

我能想到的最佳解決方案...好的配偶 – jycr753

1

如果你使用這個由具有explode()後空數組元素保留,試試這個:

$array = array_filter(explode('DELIMITER', $data)) 
+0

很好的解決方案。 –

+1

@Chris - 這將刪除所有的「DELIMITER」文本,而不僅僅是字符串的兩端。 –

+1

@JaredFarrish:是的,如果你讀到他們想要在定界符上爆炸前刪除最後一個分隔符的問題。所以我結合了他們。 – AbraCadaver

相關問題