首页 > 解决方案 > 在 Param (...) 块之间匹配 [STRING]

问题描述

如果您查看下面的代码片段,我正在尝试匹配块[STRING]内的所有内容。Param ( ... )

我已经有一段时间了,我似乎无法找到如何去做。我尝试使用前瞻、后瞻、递归和引用捕获组。

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

代码:

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

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

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

正则表达式 101 演示: https ://regex101.com/r/hVeb8R/1

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

标签: c#regexregex-lookaroundsregex-group

解决方案


.NET 支持后视中的无限重复。一种在 RegEx 引擎世界中并不常见的功能。通过调用该功能,您可以使用以下方法实现所需的结果:

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

lookbehind 中的模式确保在不超出括号的情况下Param(应该找到匹配项。[^()]意味着在回溯时从不匹配括号Param(。差不多了,但是如果您想再次检查[STRING]后跟右括号,则必须像这样附加一个积极的前瞻:

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

使用 Chrome,请在此处查看现场演示


推荐阅读