1

我希望有一些正则表达式专家可以提供帮助。我一直在寻找几个小时,但找不到答案。

这是输入字符串:

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

难题是检索最后一个参数部分(a,b,456,c),我知道它以“parameters:”开头并以“,c”结尾;

所以我尝试了以下正则表达式:

parameters:(.+?,c);

这不匹配预期的最后一部分,而是从第一个参数开始。这是比赛组:

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

所以 ?因为做一个懒惰的比赛还不够懒惰,因为它比我想要的更多。

有什么建议么?

4

2 回答 2

4

正则表达式完全按照您的定义进行:它匹配“参数”,然后延迟到它找到的第一个“c”。

试试这个:

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

[^;]是一个否定字符类,它匹配除“;”之外的每个字符。看起来 ; 不可能发生在这样一个群体内。

在 Regexr 上查看

于 2013-03-01T16:50:16.267 回答
3

最简单的方法是禁止:;匹配:

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

或者您可以更明确并禁止parameters匹配两次:

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

您的正则表达式不够懒惰的原因是正则表达式匹配从最早可能的位置开始,并 .+?尽可能多地匹配(从parameters:字符串中的第一个开始,正是您找到它匹配的字符串)。

于 2013-03-01T16:49:42.510 回答