正则表达式:如何在字符串中获取组的所有匹配项

时间:2017-12-29 16:03:15

标签: regex string regex-group

我有以下正则表达式

.*context\.Database\.SqlQuery<[A-Za-z]+>\("(?<sqlStatement>.*?[^\\])"\)

我有以下字符串

context.Database.SqlQuery<string>("select [Name] from [DomainModel] where UniqueId = 'someGuid'").Single();context.Database.SqlQuery<string>("select [Description] from [DomainModel] where UniqueId = 'someGuid'").Single();

我需要匹配所有出现的context.Database.SqlQuery<string>("")并在这些paranthesis之间提取字符串。 当我正在测试它时,像这样分割字符串:

context.Database.SqlQuery<string>("select [Name] from [DomainModel] where UniqueId = 'someGuid'").Single();
context.Database.SqlQuery<string>("select [Description] from [DomainModel] where UniqueId = 'someGuid'").Single();

工作正常。我需要让它在上一个场景中工作,匹配的输出应该是这样的

第一场比赛

  

从[DomainModel]中选择[Name],其中UniqueId ='someGuid'

第二场比赛

  

从[DomainModel]中选择[Description],其中UniqueId ='someGuid'

这是regexr

2 个答案:

答案 0 :(得分:2)

您的问题在一开始就是.*。因为这可以匹配所有内容,所以最终会获得除最后一个之外的所有比赛。

如果你放弃它,你的模式可以拿起每一个。

context\.Database\.SqlQuery<[A-Za-z]+>\("(?<sqlStatement>.*?[^\\])"\)

答案 1 :(得分:1)

问题出在.* 由于.与除新行之外的任何字符匹配。 和* quntifies正则表达式匹配零次和多次。

您只需要从给定的正则表达式的开头删除.*Here是给定问题的实例