可以与this regex联系吗?
\{{{(.*?)\}}}
匹配
{{{test1}}}
{{{{test4}}}
{{{test5}}}
我只想匹配{{{test1}}}
和{{{test5}}}
。左侧和右侧必须只有3个括号,因此{{{{test4}}}
应为INVALID。
答案 0 :(得分:4)
您需要使用外观限制分隔符:
(?<!{){{{(?!{)(.*?)(?<!})}}}(?!})
^^^^^^ ^^^^ ^^^^^ ^^^^^
请参阅regex demo
如果当前位置左侧有(?<!{)
并且{
是一个负面预测但是立即失败,那么(?!{)
是一个负面的后视,会导致匹配失败当前位置的权利。类似的构造用于设置}}}
尾随分隔符的上下文。
要排除包含 <{em> {{{....}}}
或{
的匹配}
子字符串,您需要替换{{1} }(延迟点匹配模式)与*否定字符类.*?
,这也将使[^{}]*
和(?!{)
看起来在上述正则表达式中变得多余:
(?<!{)
请参阅another regex demo,其中(?<!{){{{([^{}]*)}}}(?!})
不匹配。
用于在{{{test{6}here}}}
和{{{
之间提取值:
}}}
答案 1 :(得分:1)
你可以使用这个:(?<!{){{3}[^{}]*}{3}(?!})
<强>解释强>
{{3}
以 {完全3次
[^{}]*
任何字符, {或}
}{3}
以} 3次结束
被负面的后瞻(?<!{)
和否定的前瞻(?!})
所包围,以确保前一个字符不会{并且下一个直接字符不会}}