2016-06-22 153 views
2

我有一個字符串分隔的字符串數組。逗號使用正則表達式

我使用這個正則表達式[\""].+?[\""]|[^,]+,但它忽略了單詞last之後的空格。

所以,我的陣列看起來像這樣:

 [0] => first 
     [1] => last 
     [2] => 4443334444 

代替:

 [0] => first 
     [1] => last 
     [2] => 
     [3] => 4443334444 

我想保留的空間。

任何幫助,將不勝感激。

+1

您使用哪種語言? – Coder256

+2

爲什麼不使用'string.split(',')'? – evolutionxbox

+0

@evolutionxbox:因爲它會錯誤地分割''文本,文本「'。 @TheGooose,嘗試['「[^」\\] *(?:\\。[^「\\] *)*」| [^,] + |(?<=^|,)(?= $ | ,)'](https://regex101.com/r/oI6kY9/1)。 –

回答

0

幾個問題與您的表達。

  1. 首先[\""]是多餘的,使用["]或更好"(不 字符類)來代替。
  2. 其次,你的實際問題是由於 的+運營商需要至少一個字符(但 有逗號之間無,從而不允許空字段)。
  3. 三,這可能是一些CSV的輸出,那爲什麼不用 explode()或者類似的函數?


如果你堅持使用正則表達式,你可能會相處:

".*?"|[^,]* 

a demo on regex101.com

0

您可以使用

"[^"\\]*(?:\\.[^"\\]*)*"|[^,]+|(?<=^|,)(?=$|,)‌​ 

regex demo

表達由

  • "[^"\\]*(?:\\.[^"\\]*)*" - 一個雙引號的字符串字面量轉義序列支持
  • | - 或
  • [^,]+ - 1個或多個字符比,
  • |其他 - 或
  • (?<=^|,)(?=$|,)‌​ - 任何空字符串,或者逗號之間,或者字符串的開始/結束和一個逗號。