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