0

我正在研究小型模板类。我需要帮助将模板文件中编写的 {$variable} 转换为

像 :

<html>
   <body>
      <p> Hey Welcome {$username} </p> 
   </body>
</html>

转换为

    <html>
   <body>
      <p> Hey Welcome <?php echo $username ?> </p> 
   </body>
</html>

就像变量用户名一样。可以有任何长度的任何变量。我只想将其转换为 php echo statment。

我认为 preg_replace() 是可能的,但不知道如何。

4

3 回答 3

1

这个怎么样?

$string = 'Hello {$username}, how are you?';
$new_string = preg_replace('/\{(\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\}/', '<?php echo \\1; ?>', $string);
echo $new_string;

这给出了这个:

Hello <?php echo $username; ?>, how are you?

我从 php 手册中借用了那个表达式..

变量名称遵循与 PHP 中其他标签相同的规则。有效的变量名称以字母或下划线开头,后跟任意数量的字母、数字或下划线。作为正则表达式,它可以这样表达:' [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]* '

所以理论上它应该匹配任何有效的变量。

于 2013-06-14T13:00:40.360 回答
0
preg_replace('/\{\$username\}/', '<?php echo $username; ?>', $text);

或一般来说:

preg_replace('/\{\$([^\}]+)\}/', '<?php echo $$1; ?>', $text);
于 2013-06-14T12:59:22.043 回答
0

例如:您有应用程序文件夹结构:

  • 应用程序/视图/index.template
  • 应用程序/控制器/index.php
  • 应用程序/index.php

其中“app”文件夹是 webroot

因此,文件“app/view/index.template”包含:

<html>
   <body>
      <p> Hey Welcome {$username} </p> 
   </body>
</html>

并且“app/controller/index.php”包含下一个:

<?php
    $username = 'My Hero';
    $content = file_get_contents(__DIR__ . '../view/index.template');
    if ($content) {
        echo str_replace('{$username}', $username, $content);
    } else { echo 'Sorry, file not found...';}

“app/index.php”包含下一个:

<?php
    include __DIR__ . '/controller/index.php';

那样的东西...

于 2013-06-14T13:12:00.790 回答