2011-06-14 33 views
1

我搞砸了LESS PHP解析器,讓它取代在IE過濾器中找到的4色十六進制代碼。我想要做的是替換這樣的東西:#ff7755 33#ff775533即。刪除它中的所有空間。很明顯,這些字符可能因顏色代碼而異。我發現this question這是非常接近我想要的。正則表達式替換字符串中的空格

現在,我有這樣的正則表達式其中找到字符串就好了:

(#([0-9a-f]){6}\s[0-9a-f]{2})

所有我現在需要的是把在preg_replace()替換參數的正則表達式。

+0

可你只是做在找到字符串後,會替換一個常規字符串? – Randy 2011-06-14 20:20:40

+0

我可以,但我不知道該怎麼做,因爲整個字符串需要傳遞迴'return',而不僅僅是找到/替換位。還是我在這裏誤解了你? – Bojangles 2011-06-14 20:21:39

+0

不妨只是'$ str = preg_replace(「/ /」,「」,$ str);'如果你已經知道這絕對是一個有效的顏色代碼。 – NorthGuard 2011-06-14 20:25:32

回答

7
preg_replace('/(#[0-9a-f]{6}) ([0-9a-f]{2})/i','$1$2',$yourSource); 
+0

非常感謝你!我一直在努力掙扎幾個小時 - 但我還是無法理解正則表達式。該死的頭。 – Bojangles 2011-06-14 20:31:59

2

PHP手冊第一個例子,似乎是正是你正在嘗試做的:

<?php 
$string = 'April 15, 2003'; 
$pattern = '/(\w+) (\d+), (\d+)/i'; 
$replacement = '${1}1,$3'; 
echo preg_replace($pattern, $replacement, $string); 
?> 

當然,對你來說是:

<?php 
$string = '#ff7755 33'; 
$pattern = '/(#[0-9a-f]{6})\s([0-9a-f]{2})/i'; 
$replacement = '${1}$2'; 
echo preg_replace($pattern, $replacement, $string); 
?> 
+0

無需編寫'$ {1}'而不是'$ 1'。除了那個+1。 – NikiC 2011-06-14 20:24:25

+0

@nikic:這是從PHP手冊複製粘貼。手冊需要它,因爲它將1放在那裏,因爲它沒有任何傷害,所以我把它放在一邊。 – 2011-06-14 20:25:53

+1

你是對的,你可以使用它。我只是不喜歡它,如果人們添加額外的括號(或大括號)。我的意思是,你可以編寫'$ {'var'}'而不是'$ var',偶爾你會這麼做,但通常我會考慮'$ {'var'}'(或'$ {1} ')不好的風格:) – NikiC 2011-06-14 20:28:15