2016-09-24 42 views
0

如何排除preg_split正斜槓,後跟字符串括在單引號中?如何排除preg_split正斜槓,後跟單引號中的字符串

我已經對這個問題頗感興趣。

下面是代碼,其次是輸出。

$str = "storeid='1,2',categoryname = 'the ultimate \'operating room'"; 

$match = preg_split("/('[^'\\\\]*')/U", $str, null, PREG_SPLIT_DELIM_CAPTURE); 

print_r($match); 

輸出

Array ([0] => storeid= [1] => '1,2' [2] => ,categoryname = 'the ultimate \ [3] => 'operating room' [4] =>) 

但這裏是我的預期產出,我要排除\」。

希望有人能理解並幫助我在這裏。

Array ([0] => storeid= [1] => '1,2' [2] => ,categoryname =[3] => 'the ultimate \'operating room' ) 

回答

0

捕獲所有用單引號括起來的內容時,你應該注意escpaed單引號。在此之後的正則表達式:

'[^'\\\\]*(?:\\\\.[^'\\\\]*)*' 
  • '單引號(開口)
  • [^'\\\\]*所有的人物,除了'\
  • (?:\\\\.[^'\\\\]*)*匹配,如果存在,那麼以前同樣的圖案儘可能
  • 轉義字符
  • '單引號(關閉)

PHP:

$match = preg_split("/('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')/", 
    $str, 
    -1, 
    PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); 

輸出:

Array 
(
    [0] => storeid= 
    [1] => '1,\'2' 
    [2] => ,categoryname = 
    [3] => 'the ultimate \'operating room' 
) 
+0

如果該模式將與任何突破轉義字符(單引號之間),這不是一個單引號。你應該用'(?s:\\\\。[^'\\\\\ *)*)替換'(?:\\\\'[^'\\\\ *] *)'來處理任何轉義包括換行符的字符。 –

+0

我相信我寫回答的初始正則表達式很好。我不確定我在寫描述時想的是什麼。不管怎麼說,還是要謝謝你。 @CasimiretHippolyte – revo

相關問題