正则表达式查找包含在3个括号中的字符串

时间:2017-04-11 08:42:53

标签: c# .net regex

可以与this regex联系吗?

\{{{(.*?)\}}}

匹配

{{{test1}}}
{{{{test4}}}
{{{test5}}}

我只想匹配{{{test1}}}{{{test5}}}。左侧和右侧必须只有3个括号,因此{{{{test4}}}应为INVALID。

2 个答案:

答案 0 :(得分:4)

您需要使用外观限制分隔符:

(?<!{){{{(?!{)(.*?)(?<!})}}}(?!})
^^^^^^    ^^^^      ^^^^^   ^^^^^

请参阅regex demo

如果当前位置左侧有(?<!{)并且{是一个负面预测但是立即失败,那么(?!{)是一个负面的后视,会导致匹配失败当前位置的权利。类似的构造用于设置}}}尾随分隔符的上下文。

要排除包含 <{em> {{{....}}}{ 的匹配}子字符串,您需要替换{{1} }(延迟点匹配模式)与*否定字符类.*?,这也将使[^{}]*(?!{)看起来在上述正则表达式中变得多余:

(?<!{)

请参阅another regex demo,其中(?<!{){{{([^{}]*)}}}(?!}) 不匹配。

用于在{{{test{6}here}}}{{{之间提取值:

}}}

答案 1 :(得分:1)

你可以使用这个:(?<!{){{3}[^{}]*}{3}(?!})

<强>解释

{{3} {完全3次

开头

[^{}]*任何字符 {或}

除外

}{3}} 3次结束

被负面的后瞻(?<!{)和否定的前瞻(?!})所包围,以确保前一个字符不会{并且下一个直接字符不会}}