【发布时间】:2019-03-16 13:52:35
【问题描述】:
如果您查看以下代码 sn-p,我正在尝试匹配 Param ( ... ) 块内的所有 [STRING]仅。
我在这方面已经有一段时间了,但我似乎不知道该怎么做。我尝试使用前瞻、后瞻、递归和引用捕获组。
我目前拥有的:(?<=Param\(\s*\1|)(\[\w*\])
代码:
Param(
[STRING]$CustomerName,
[STRING]$ClusterName,
)
[STRING]$CustomerName,
[STRING]$ClusterName,
如果第一个[STRING] 也匹配Param (,我想用正则表达式实现匹配所有[STRING]。
然后继续匹配直到找到右大括号)。
Regex101 演示:https://regex101.com/r/hVeb8R/1
我在那里使用 javascript,因为它似乎与 C# 的预期功能非常匹配。
【问题讨论】:
-
它是什么语言或工具?
-
对不起,它是 C# .NET
-
你真幸运。试试
(?<=Param\([^()]*)\[\w+]。根据您当前的要求,它可以满足您的需求。但是,您不应该在 regex101 中使用它。它是 .NET 特定的,而 regex101 不支持 .NET。但是在最新版本的 Chrome 中,通过切换到 javascript 引擎,您会看到预期的输出 regex101.com/r/68KpvA/1 -
确实有效!谢谢!不过我很困惑,我不明白它是如何工作的,我可以看到
^()并理解它是打开和关闭大括号,但是引擎如何知道我们想要的匹配在大括号中间?如果这有意义吗? -
如果您想确保字符串在括号内,
@"(?<=Param\([^()]*)\[\w+](?=[^()]*\))"也需要先行。见this .NET regex demo
标签: c# regex regex-lookarounds regex-group