2012-04-05 119 views
3

你好嗎?我有下一個任務。我有很多可以包含重複斜槓的字符串。我需要將重複的斜槓替換爲一個斜槓(斜線的任何數量),但是當在斜槓後面找到下一個符號(引號,雙引號,NUL(NULL字節))時,應刪除所有斜線。謝謝。我的語言 - PHP。一些測試:正則表達式刪除重複的斜線

$s1 = 'test\\\\string'; 
// test\string 
$s2 = 'test\\\\\"\\\\\'\\\\string'; 
// test"'\string 
$s3 = 'test\\string\\\\\"'; 
// test\string" 

回答

4

使用

preg_replace("~\\\\+([\"\'\\x00\\\\])~", "$1", $string); 

只有一個\更換的\任意金額。

圖案由任意初始backslahes \\\\+和下一個符號即是"一個,'\x00,或\的。替換將有效地刪除任何前面的反斜槓。

在正則表達式中需要4個反斜槓。兩個反斜槓(\\)將導致正則表達式字符串中的一個反斜槓(\),因爲PHP解釋器使用反斜槓來轉義特殊字符,如"\。出於同樣的原因,您需要在正則表達式中使用兩個反斜槓。

或者解釋周圍的其他方法:爲了獲得\+爲正則表達式,你必須添加一個反斜槓來告訴PCRE了一個反斜槓不是逃避+。要獲得\\+作爲字符串,您還需要在每個反斜槓之前添加一個反斜槓,以告訴PHP解釋器您不想用第一個反斜槓轉義第二個反斜槓。

源代碼:\\\\+

正則表達式字符串內:\\+

模式匹配:\+

+0

謝謝。有用。你也可以用str_replace看到我的答案。 – pltvs 2012-04-05 09:43:27

0

stripslashes怎麼了?它佔據了一些斜槓,可以逃避「特殊」字符並消除「額外」斜線。

+0

1)我可以有很多斜槓,我需要在循環2中運行stripslashes)stripslashes將'\ a'轉換爲'a'。這是不正確的 – pltvs 2012-04-05 09:27:49

2

替換2個或更多個連續斜線單斜線 preg_replace('/\\\\+/','\\',$str);

+0

爲了替換正斜線: 'preg_replace('/'/'/ + /','/',$ string);' – KTB 2013-01-07 08:53:00

1

嘗試這些:

preg_replace("/\\+(['\"\0\\])/", "$1", $string); 
2

替代方法。

$s = 't\est\\\\\\\\\\\\stri\\\\\"\\\\\'\\\\0\\\\ng'; 
$s = preg_replace('~\\\\+~', '\\', $s); 
$s = str_replace(array('\\"', '\\\'', '\\0'), array('"', '\'', "\0"), $s); 
+0

str_replace將會執行多個替換,因此您也可以替換多個反斜槓。我無法讓它與str_replace一起工作,但如果你喜歡,就去做吧。 :-) – Basti 2012-04-05 09:47:52