2013-03-01 70 views
1

我希望有一些正則表達式專家可以提供幫助。我一直在尋找小時,但找不到答案。正則表達式:懶,但不夠懶

這是輸入字符串:

parameters:x,y,123,z;parameters:a,b,456,c; 

的難題是中檢索的最後的參數部分(A,B,456,c)和我知道它開始與「參數:」,並以結束」, C」;

所以,我想下面的正則表達式:

parameters:(.+?,c); 

這不符合預期的最後一部分,但是從第一個參數的開始。這是比賽組:

x,y,123,z;parameters:a,b,456,c 

那麼?因爲做一個懶惰的比賽是不夠懶,因爲它匹配更多,然後我想。

有什麼建議嗎?

+0

爲什麼不用分號分割';',然後匹配? – nhahtdh 2013-03-01 16:57:54

回答

3

最簡單的方法是從匹配禁止:;

parameters:([^:;]+,c); 

或者你可以更明確和匹配兩次禁止parameters

parameters:((?:(?!parameters).)+,c); 

爲什麼你的正則表達式WASN原因不夠慵懶的是,正則表達式匹配從儘可能早的位置開始,並且.+?匹配儘可能多的(從字符串中的第一個parameters:開始)你發現它匹配的字符串)。

+0

從來沒有想過使用禁止建設。完美的作品。 – mkoper 2013-03-04 14:26:49

4

正則表達式正在做你已經定義的東西:它匹配「參數」,然後懶,直到找到第一個「c」。

試試這個:

parameters:([^;]+,c); 

[^;]是一個否定的字符類,每一個字符,但匹配 「;」。看起來 ;不能發生在這樣一個羣體中。

查看here on Regexr

相關問題