c# - 在 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# 的预期功能非常匹配。
解决方案
.NET 支持后视中的无限重复。一种在 RegEx 引擎世界中并不常见的功能。通过调用该功能,您可以使用以下方法实现所需的结果:
(?<=Param\([^()]*)\[\w+]
lookbehind 中的模式确保在不超出括号的情况下Param(
应该找到匹配项。[^()]
意味着在回溯时从不匹配括号Param(
。差不多了,但是如果您想再次检查[STRING]
后跟右括号,则必须像这样附加一个积极的前瞻:
(?<=Param\([^()]*)\[\w+](?=[^()]*\))
使用 Chrome,请在此处查看现场演示
推荐阅读
- java - 多个端点中的一个失败时的 REST API 响应处理
- audio - 为什么立体声 mp3 文件在使用 ffmpeg 从 mp4 转换时会丢失一个通道?
- javascript - InnerHTML 未按预期呈现
- python - 当尝试循环绘制每个 Pandas 列时,Seaborn distplot 仅返回一列
- android - 在 FireBaseCrashlytic 新版本中找不到 HttpRequest.Base64
- android - 即使将权限添加到清单中,华为手机写入外部存储也失败
- c++ - 数字和字符串的宏定义
- c - 如何获得 C 中进程的最准确时间?
- regex - 参数的url重写规则
- vba - VBA 非常缓慢地卸载用户窗体