2013-02-25 106 views
2

我需要管理逗號拆分中的轉義。 這是一個字符串例如:Php拆分字符串轉義配額

var1,t3st,ax_1,c5\,3,last 

我需要這種分裂:

var1 
t3st 
ax_1 
c5\,3 
last 

請考慮到這一點: 「C5 \,3」 不分裂。

我試着用這樣的:

$expl=preg_split('#[^\\],#', $text); 

但我解開每個分割的最後一個字符。

回答

2

使用這個表達式

$str = 'var1,t3st,ax_1,c5\,3,last'; 
$expl=preg_split('#(?<!\\\),#', $str); 

print_r($expl); // output Array ([0] => var1 [1] => t3st [2] => ax_1 [3] => c5\,3 [4] => last) 

工作示例http://codepad.viper-7.com/pWSu3S

+1

+1很好的解決方案 – 2013-02-25 11:39:05

+1

我想糾正你的這樣的代碼:''$ expl = preg_split('#(?<!\\\),#',$ str,-1,PREG_SPLIT_NO_EMPTY);'。避免數組中的空元素 – Winston 2013-02-25 17:08:16

1

嘗試用回顧後:

preg_split('#(?<!\\),#', $text); 
+0

在你回答計算器逃脫最後一個斜線: '(?<\\\\!)#,#' – Tobia 2013-02-25 12:00:52

0

做一個3階段的方法

首先替換\與成才 「獨特」 之類\\

做你的分裂 「」

用\替換\\,

這不如正則表達式,但它會工作;)

0

是這樣行嗎?

<?php 

$text = "var1,t3st,ax_1,c5\,3,last"; 
$text = str_replace("\,", "#", $text); 
$xpode = explode(",", $text); 
$new_text = str_replace("#", "\,", $xpode); 
print_r($new_text); 

?> 

輸出

Array ([0] => var1 [1] => t3st [2] => ax_1 [3] => c5\,3 [4] => last)