【问题标题】:Converting tags to PHP tags using PHP使用 PHP 将标签转换为 PHP 标签
【发布时间】:2011-04-02 10:17:38
【问题描述】:

我该如何改变

{for ...cond.... }
somethinginbetween
{/for}

<?php for (...cond...){ ?>
somethinginbetween
<?php } ?>

【问题讨论】:

  • 具体是for 标签,或者可以是使用该语言的任何标签
  • 它可以使用 if、else if、elseif、foreach、while、do while、nothing else
  • 你需要这个做什么?你打算将 smarty 模板翻译成 php 文件吗?如果是这样,我实际上会用手做。你也可以像这样使用 php 标签的替代版本:而不是 for(){....} 你写:for(): .... endfor; 你可以用 替换每个 {for cond} 和每个 /for 同样适用于 if, foreach, switch .....见这里php.net/manual/de/control-structures.alternative-syntax.php
  • 我感觉这可以通过循环中的两个 pregmatch 语句来实现,例如获取每组 {for cond}{/for} 然后将其替换为 php 代码并循环遍历所有这几项。但是,我对正则表达式的熟练程度极差,我现在真的需要这段代码来磨练。谢谢。

标签: php tags replace


【解决方案1】:

这是一个快速而简单的字符串文字字符串替换:

$code = str_replace('{for ', '<?php for (', $code);
$code = str_replace(' }', '){ ?>', $code);
$code = str_replace('{/for}', '<?php } ?>', $code);

如果somethhingbetween 包含if(){ },它将不起作用,因为}){ ?&gt; 替换。但对于其他只有{for condition }{/for} 的情况,就足够了。

正则表达式方法结合简单的字符串替换,这假设在 for 循环中没有出现 }(匹配除 } 之外的所有内容:[^}]+

$code = preg_replace('/{for ([^}]+)}/', '<?php for ($1) { ?>', $code);
$code = str_replace('{/for}', '<?php } ?>', $code);

此功能不进行任何验证,您有责任为其提供正确打开/关闭的{for}{/for}s。

如果需要执行 PHP,请插入 PHP。另一种方法是编写自己的解析代码。您可以查看 Smarty 之类的模板项目。

【讨论】:

  • 这会将所有的 } 替换为 {?> 但我不想那样做。
  • @user658911:添加了正则表达式方法。请注意for != foreach。所以你必须使用{for $i=0; $i&lt;2; $i++}...some code...{/for}之类的东西。
  • 如果您使用替代的 php 语法,那么您可以像这样进行替换:{for&lt;?php for( 然后替换所有 {/for}&lt;?php endfor;?&gt; 和最后任何剩余的 }):?&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
相关资源
最近更新 更多