模板引擎同时处理{{foo}}
和{{{bar}}}
,它们对应于不同的处理。
目前,源是preg_replace
这样处理的:{{\s*(.+?)\s*}}
和{{{\s*(.+?)\s*}}}
。
问题是,这些正则表达式重叠,例如{{\s*(.+?)\s*}}
匹配{{{bar}}}
.
重要提示:标记{{
, {{{
, }}
,}}}
是用户可在实际代码中配置的。[^{}]
所以不能使用通常的解决方案。
当前的解决方案是替换{{{ }}}
's before {{ }}
',但这还不够健壮。实际上,标记是用户可配置的,用户可以轻松地将标记设置为破坏应用程序的值。
我正在尝试制作更强大的正则表达式,它们是互斥的,而不是依赖于顺序的。我已经尝试过使用断言、条件等但没有成功。任何帮助将不胜感激。
顺便说一句,只要代码不变得过长,使用正则表达式不是强制性的。