我有以下正则表达式
.*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。
你的问题在一开始就是.*
。由于这可以匹配所有内容,最终会获得除最后一个之外的所有匹配。
如果你放弃它,你的模式可以拿起每一个。
context\.Database\.SqlQuery<[A-Za-z]+>\("(?<sqlStatement>.*?[^\\])"\)
问题是.*
因为.
与除新行之外的任何字符匹配。和*
quntifies正则表达式匹配零和多次。
你只需要从给定的正则表达式的开头删除.*
。 Here是给定问题的典范