2017-08-02 156 views
0

我試圖找到兩個字符之間的所有文本,但有時字符串中包含分隔符。正則表達式量詞 - 兩個字符之間的多個

例如,如果我使用

(.*?)=(.*?),* 

在以下字符串:

color=blue,weight=100kg, 

這將導致:

match #1: color=blue 
match #2: weight=100kg 

但是,如果我有以下字符串:

color=blue,red,weight=100kg, 

這將導致:

match #1: color=blue 
match #2: red,weight=100kg 

我怎樣才能讓正則表達式返回以下? (切割字符串在逗號字符最後一次出現)

match #1: color=blue,red 
match #2: weight=100kg 

請注意顏色用逗號分隔的金額可能超過3,或根本沒有。

由於提前,

+0

代替使用點來描述鍵,用排除逗號(和等號太)字符類。 –

回答

1

您可以使用此正則表達式:

[^,]+=[^=]+(?=,)其中

[^,]+ - 參數名

[^=]+(?=,) - 這將捕獲參數值,允許包含所有內容,但是=符號,並且應以逗號結尾。的

regex101 example

+0

完美的作品。我會研究它,所以我完全理解它。謝謝! –

+0

所以'([^,] + = [^ =] +(?=,)),(。*)' –

1

與否定的字符類玩了一下週圍,你應該能夠與

[^=,]+=(?:[^=,]+|,(?![^,=]+=))+ 

匹配呢?這

  • [^=,]+的一切,這不是一個逗號匹配或=
  • =以下=
  • (?:[^=,]+|,(?=[^,=]+,))+的一切,這不是一個逗號或不直接受=中間沒有toher逗號,後跟一個逗號 - 因爲經常反覆地

https://regex101.com/r/p8Bz9o/1

+0

也完美無瑕。謝謝! –

相關問題