在参数(...)块之间匹配[STRING]

时间:2018-10-11 13:04:21

标签: c# regex regex-lookarounds regex-group

如果您查看下面的代码段,则尝试匹配[STRING]块内的所有Param ( ... )

我已经有一段时间了,但是我似乎无法找到如何做的方法。我尝试使用先行,后备,递归和引用捕获组。

我目前拥有的是:(?<=Param\(\s*\1|)(\[\w*\])

代码:

Param(
    [STRING]$CustomerName,
    [STRING]$ClusterName,
)

[STRING]$CustomerName,
[STRING]$ClusterName,

如果第一个[STRING]也匹配[STRING],我想用正则表达式实现的是匹配所有Param (。 然后继续匹配,直到找到右括号)

Regex101演示:https://regex101.com/r/hVeb8R/1

我在那里使用javascript,因为它似乎与C#的预期功能非常匹配。

1 个答案:

答案 0 :(得分:2)

.NET在回溯中支持无限重复。 RegEx引擎世界中很少发现的一种功能。通过调用该功能,您可以使用以下方法获得所需的结果:

(?<=Param\([^()]*)\[\w+]

后向模式确保在Param(上没有找到括号。 [^()]表示在回溯Param(时从不匹配括号。差不多了,但是如果您要在[STRING]后面加上右括号再进行一次检查,则必须像这样附加正向查找:

(?<=Param\([^()]*)\[\w+](?=[^()]*\))

使用Chrome,请参见live demo here