//$str中$ccc并没有结束标记
$str = '
{if $abc}
123
{/if}
{if $ccc}
345
{if $cda}
abbb
{/if}
';
$_pattenIf = '/\{if\s+\$([\w]+)\}/';
$_pattenEndIf = '/\{\/if\}/';
$_pattenElse = '/\{else\}/';
if (preg_match($_pattenIf,$str)) {
if (preg_match($_pattenEndIf,$str)) {
$str = preg_replace($_pattenIf,"<?php if (\$this->_vars['$1']) {?>",$str);
$str = preg_replace($_pattenEndIf,"<?php } ?>",$str);
if (preg_match($_pattenElse,$str)) {
$str = preg_replace($_pattenElse,"<?php } else { ?>",$str);
}
} else {
exit('ERROR:if语句没有关闭!');
}
}
echo '<pre>';
echo $str;
//输出$str并没有报错,编译后的字符串如下
<pre>
<?php if ($this->_vars['abc']) {?>
123
<?php } ?>
<?php if ($this->_vars['ccc']) {?>
345
<?php if ($this->_vars['cda']) {?>
abbb
<?php } ?>
//不知道如何解决这个问题,有知道的告诉一下哈
$str = '
{if $abc}
123
{/if}
{if $ccc}
345
{if $cda}
abbb
{/if}
';
$_pattenIf = '/\{if\s+\$([\w]+)\}/';
$_pattenEndIf = '/\{\/if\}/';
$_pattenElse = '/\{else\}/';
if (preg_match($_pattenIf,$str)) {
if (preg_match($_pattenEndIf,$str)) {
$str = preg_replace($_pattenIf,"<?php if (\$this->_vars['$1']) {?>",$str);
$str = preg_replace($_pattenEndIf,"<?php } ?>",$str);
if (preg_match($_pattenElse,$str)) {
$str = preg_replace($_pattenElse,"<?php } else { ?>",$str);
}
} else {
exit('ERROR:if语句没有关闭!');
}
}
echo '<pre>';
echo $str;
//输出$str并没有报错,编译后的字符串如下
<pre>
<?php if ($this->_vars['abc']) {?>
123
<?php } ?>
<?php if ($this->_vars['ccc']) {?>
345
<?php if ($this->_vars['cda']) {?>
abbb
<?php } ?>
//不知道如何解决这个问题,有知道的告诉一下哈