我正试图解决我在 .Net 平衡组正则表达式中发现的一个错误。
我正在尝试匹配!{}
作为开/关组合。
当前正则表达式 ->!{[^!{}]*(((?<Open>!{)[^!{}]*)+((?<Close-Open>})[^!{}]*)+)*(?(Open)(?!))}
这匹配!{some random stuff here}
成功。它也匹配!{some other Stuff !{} with nesting}
但是,它根本不匹配!{some stuff with {} just curly braces}
。字符串中的“{}”似乎导致了一些问题,因为它似乎认为该组不再“平衡”
我正在http://regexstorm.net/tester上测试所有这些,这是 .Net 特定正则表达式测试的好地方。
公平地说,我不是正则表达式专家,并且厚颜无耻地从该站点http://www.regular-expressions.info/balancing.html复制/操纵了正则表达式
我不需要它能够匹配嵌套,因为我将使用 c# 递归地遍历匹配,但我只需要能够在上面失败的示例上获得正匹配。
更新
这是该模式的初始目标。就像 Razor 页面匹配 @{ some C# code here } 作为代码块一样,我使用了 !{some code here} 的模式来划分 html 页面内的代码段。我为客户编写了一个网站,他们使用这些“替换器”在其 html 页面中执行自定义逻辑。例如:
<p> Hello !{CurrentSession.GetUser().FirstName}</p>
当页面呈现出来时,我使用 Regex 来识别那些“替换器”,然后使用 Springframework.Net 针对已知上下文执行该代码。
自 2009 年以来,这一切都运作良好(10 多年前是的!)但现在他们开始使用更多的 Json 类型数据,这就是我发现我的正则表达式的这个错误/问题的地方。
所以想象一下这个例子
<script type="text/javascript">
var myArray = [ !{CurrentSession.GetUser().GetDataOrDefault( '{Name:"MyName"}' )} ];
</script>
正如您在上面的示例中看到的那样,在我试图匹配的替换器中有一个带有花括号“{}”的 Json!{} 这就是正则表达式失败的地方。
PS'!不是可选的,它必须用 '!{' 打开并用 '}' 关闭
提前致谢