正则表达式捕获组&懒惰的比赛

时间:2015-07-07 15:36:11

标签: .net regex

使用.Net C#,我想匹配以下内容中$ select子句中的名称:

http://serveraddress/ODataServ/WcfDataService.svc/Persons?$select=LAST_NAME_IDNT,FIRST_NAME_IDNT&$top=1&$filter=Id eq '0000'

所以我想拥有" LAST_NAME_IDNT,FIRST_NAME_IDNT" (我稍后会根据逗号分割它)

$ select子句可以位于URL的中间,也可以位于末尾,即:

http://serveraddress/ODataServ/WcfDataService.svc/Persons?$top=1&$filter=Id eq '0000'&$select=LAST_NAME_IDNT,FIRST_NAME_IDNT

所以我写了以下模式:(\$select\=)(.[^&])*(&|$) 并试图获得第2组。我不知道它是否因为懒惰匹配,但第2组只包含两个字符:例如" NT"在我的例子中。

我不知道如何制作它,以便我可以检索" LAST_NAME_IDNT,FIRST_NAME_IDNT"

提前致谢

2 个答案:

答案 0 :(得分:1)

您的分组错误..请使用以下内容:

(\$select\=)([^&]*?)(&|$)        //also no need for '.'
            ↑      ↑

请参阅DEMO

答案 1 :(得分:1)

您正在使用的正则表达式:

(\$select\=)(.[^&])*?(&|$)

(。[^&]) - 此捕获组一起捕获两个字符。任何角色而不是&amp ;.

现在(。[^&])*?表示惰性匹配的这两个字符中的0个或更多个集合。因此,捕获组将始终具有匹配的最后两个字符

请改用:

(\$select\=)([^&]*)