2013-03-01 38 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

相关问题