在 Param (...) 块之间匹配 [STRING]
Matching [STRING] between Param (...) block
如果您查看下面的代码片段,我会尝试匹配 Param ( ... )
块内的所有 [STRING]
ONLY.
我从事这方面工作有一段时间了,但我似乎不知道该怎么做。我尝试使用先行、后行、递归和引用捕获组。
我目前拥有的:(?<=Param\(\s*|)(\[\w*\])
代码:
Param(
[STRING]$CustomerName,
[STRING]$ClusterName,
)
[STRING]$CustomerName,
[STRING]$ClusterName,
我想用正则表达式实现的是匹配所有 [STRING]
如果第一个 [STRING]
也匹配 Param (
。
然后继续匹配,直到找到右大括号)
。
Regex101 演示:https://regex101.com/r/hVeb8R/1
我在那里使用 javascript,因为它似乎非常符合 C# 的预期功能。
.NET 支持回顾中的无限重复。在 RegEx 引擎世界中并不常见的功能。通过调用该功能,您可以使用以下方法获得所需的结果:
(?<=Param\([^()]*)\[\w+]
lookbehind 中的模式可确保在不超出括号的情况下找到 Param(
上的匹配项。 [^()]
表示在回头查找 Param(
时从不匹配括号。差不多就是这样,但是如果你想对 [STRING]
进行另一次检查,然后是一个右括号,你必须像这样附加一个积极的前瞻:
(?<=Param\([^()]*)\[\w+](?=[^()]*\))
使用 Chrome,参见 live demo here
如果您查看下面的代码片段,我会尝试匹配 Param ( ... )
块内的所有 [STRING]
ONLY.
我从事这方面工作有一段时间了,但我似乎不知道该怎么做。我尝试使用先行、后行、递归和引用捕获组。
我目前拥有的:(?<=Param\(\s*|)(\[\w*\])
代码:
Param(
[STRING]$CustomerName,
[STRING]$ClusterName,
)
[STRING]$CustomerName,
[STRING]$ClusterName,
我想用正则表达式实现的是匹配所有 [STRING]
如果第一个 [STRING]
也匹配 Param (
。
然后继续匹配,直到找到右大括号)
。
Regex101 演示:https://regex101.com/r/hVeb8R/1
我在那里使用 javascript,因为它似乎非常符合 C# 的预期功能。
.NET 支持回顾中的无限重复。在 RegEx 引擎世界中并不常见的功能。通过调用该功能,您可以使用以下方法获得所需的结果:
(?<=Param\([^()]*)\[\w+]
lookbehind 中的模式可确保在不超出括号的情况下找到 Param(
上的匹配项。 [^()]
表示在回头查找 Param(
时从不匹配括号。差不多就是这样,但是如果你想对 [STRING]
进行另一次检查,然后是一个右括号,你必须像这样附加一个积极的前瞻:
(?<=Param\([^()]*)\[\w+](?=[^()]*\))
使用 Chrome,参见 live demo here