正则表达式:如何获取字符串中组的所有匹配项
Regex: How to get all matches of a group in a string
我有以下正则表达式
.*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>("")
并提取这些括号之间的字符串。
当我像这样拆分字符串来测试它时:
context.Database.SqlQuery<string>("select [Name] from [DomainModel] where UniqueId = 'someGuid'").Single();
context.Database.SqlQuery<string>("select [Description] from [DomainModel] where UniqueId = 'someGuid'").Single();
它工作正常。我需要让它在前面的场景中工作,匹配的输出应该是这样的
第一场比赛
select [Name] from [DomainModel] where UniqueId = 'someGuid'
第二场比赛
select [Description] from [DomainModel] where UniqueId = 'someGuid'
这里是regexr。
你的问题是开头的.*
。由于它可以匹配所有内容,因此最终会选择除最后一个之外的所有匹配项。
如果你只是放下它,你的模式可以拾取每一个。
context\.Database\.SqlQuery<[A-Za-z]+>\("(?<sqlStatement>.*?[^\])"\)
问题出在 .*
因为 .
匹配除换行符以外的任何字符。
并且 *
量化正则表达式以在零次和多次之间进行匹配。
您只需要从给定正则表达式的开头删除 .*
。
Here 是给定问题的工作示例
我有以下正则表达式
.*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>("")
并提取这些括号之间的字符串。
当我像这样拆分字符串来测试它时:
context.Database.SqlQuery<string>("select [Name] from [DomainModel] where UniqueId = 'someGuid'").Single();
context.Database.SqlQuery<string>("select [Description] from [DomainModel] where UniqueId = 'someGuid'").Single();
它工作正常。我需要让它在前面的场景中工作,匹配的输出应该是这样的
第一场比赛
select [Name] from [DomainModel] where UniqueId = 'someGuid'
第二场比赛
select [Description] from [DomainModel] where UniqueId = 'someGuid'
这里是regexr。
你的问题是开头的.*
。由于它可以匹配所有内容,因此最终会选择除最后一个之外的所有匹配项。
如果你只是放下它,你的模式可以拾取每一个。
context\.Database\.SqlQuery<[A-Za-z]+>\("(?<sqlStatement>.*?[^\])"\)
问题出在 .*
因为 .
匹配除换行符以外的任何字符。
并且 *
量化正则表达式以在零次和多次之间进行匹配。
您只需要从给定正则表达式的开头删除 .*
。
Here 是给定问题的工作示例