这有点难以解释我真正想要的东西(更好的标题建议得到赞赏,以便人们可以在将来轻松找到它).
假设我有这个:
{
    {
        $myTagThing$
    }
}
Run Code Online (Sandbox Code Playgroud)
我想要匹配
{
    $myTagThing$
} 
Run Code Online (Sandbox Code Playgroud)
即匹配一切从过去{之前$myTagThing$,直到第一个}之后$myTagThing$.
所以我认为我需要这个\{.*\$myTagThing\$.*\},但它也会匹配字符串中的第一个{和最后一个}(即整个例子).然后我尝试使用前瞻和后视(均为负面)\{(.*(?!\{))\$myTagThing\$.*(?<!\})\}(https://regex101.com/r/RfdHUH/1/).但这仍然行不通.
我的理论是,我可能正在使用前瞻和错误的方式,因为这是我第一次使用它们.
有任何想法吗?
编辑:标志是\gms.
编辑:  这解决了{ $myTagThing$ {} }不再包含在问题中的场景。
关于您更新的问题。在 .NET 中,您想要的称为balanced groups. 在其他正则表达式引擎中,balanced constructs/expressions. 术语略有不同,引擎之间的语法也有很大不同,行为也是如此。
无论如何,为了捕获{}尽可能最大的内容,您需要:
[^{}]*
(
((?'Open'{)[^{}]*)+
((?'Close-Open'})[^{}]*)+
)*
(?(Open)(?!))
Run Code Online (Sandbox Code Playgroud)
(设置忽略空白标志或折叠此正则表达式)。这是你的答案的核心。我们只需在这里修改第一行和最后一行:
\{[^{}]*myTagThing
[^{}]*
(
((?'Open'{)[^{}]*)+
((?'Close-Open'})[^{}]*)+
)*
(?(Open)(?!))
[^{}]*\}
Run Code Online (Sandbox Code Playgroud)
“一个正则表达式”解决方案可能会很快变得复杂,但如果您发现自己经常使用 .NET 正则表达式,您可能会发现以下内容值得研究:
上面的链接是我在寻找类似字符串时遇到的问题:
Type VAR.*while{{VAR++}}其中 后面while可以跟着balanced {}。赏金奖励的答案就是您想要查看的答案。这是一个比你的问题更复杂的问题,但你可以看到它很快就会变得疯狂:
另请参阅有关此功能的官方文档:
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           233 次  |  
        
|   最近记录:  |