我有一个简单的模板系统,正则表达式捕获了一些特殊标签,例如if条件。 现在我需要在if条件中包含一个if条件,并且当前表达式在第一个if-endtag处中断。
我尝试了(?R)和其他一些方法,但是要么括号内没有任何HTML标记,要么它们在第一个/#if
处中断了。{{{#if(.*?)}}}(.*?){{{\/#if}}}
和我的HTML代码
{{{#if:header:!=:}}}
<div class="header">
<h1>
{{{header}}}
{{{#if:header_bar:!=:}}}
<div class="headbuttons">
{{{header_bar}}}
</div>
{{{/#if}}}
</h1>
</div>
{{{/#if}}}
预期从#if:header:!=:}}}的第一个返回到第二个/#if
有人可以帮我完成这项工作吗?
答案 0 :(得分:0)
我尝试过(?R)…
import { AuthConsumer } from '../AuthContext';
import Welcome from './Welcome';
import Initial from './Initial';
export default ({ user, children }) => (
<AuthConsumer>
{({ user }) => (
<div css={headerStyles}>
<div>
<Welcome name={user.name} />
<Initial name={user.name} />
</div>
{children}
</div>
)}
</AuthConsumer>
);
有效;除了简单的if-body (?R)
以外,我们可以在一侧使用递归模式(.*?)
,在另一侧使用简单模式.*?(?R).*?
的替代方式:.*?
。样本:
(.*?(?R).*?|.*?)
输出:
preg_match('/{{{#if(.*?)}}}(.*?(?R).*?|.*?){{{\/#if}}}/s', '
{{{#if:header:!=:}}}
<div class="header">
<h1>
{{{header}}}
{{{#if:header_bar:!=:}}}
<div class="headbuttons">
{{{header_bar}}}
</div>
{{{/#if}}}
</h1>
</div>
{{{/#if}}}', $matches);
echo $matches[0], "\n";