使用正则表达式替换自定义代码的PHP模板

时间:2011-03-14 13:52:58

标签: php regex

如何使用正则表达式将{$ game.name.fullname}转换为$ game ['name'] ['fullname']。

感谢

4 个答案:

答案 0 :(得分:1)

preg_replace(
    '/{\$([^.{}]*)\.([^.{}]*)\.([^.{}]*)}/',
    '$$1[\'$2\'][\'$3\']',
    '{$game.name.fullname}');

编辑:根据ridgerunner的评论编辑。现在匹配点之间的任何内容并匹配多个字符串。

答案 1 :(得分:1)

此测试函数具有您想要的(注释)正则表达式:

function process_data(&$text)
{
    $re = '/# Reformat a string.
        \{       # Opening delimiter.
        (\$\w+)  # $1: game.
        \.       # Parts separated by dot.
        (\w+)    # $2: name.
        \.       # Parts separated by dot.
        (\w+)    # $3: fullname.
        \}       # Closing delimiter.
        /ix';
    $text = preg_replace($re, "$1['$2']['$3']", $text);
    return $text;
}

答案 2 :(得分:0)

如果你问如何将像“{mario.jumper.two}”这样的字符串转换为像$ game ['mario'] ['jumper'] ='two'这样的php数组

$input="{mario.jumper.two}"
$input=str_replace( array('{','}') , '' ); //strip out brackets
$inputArray=explode('.',$input) // creates array( 'mario','jumper','two')
$game=array(
  $inputArray[0] => array(
      $inputArray[1] => $inputArray[2]
      )
);

答案 3 :(得分:0)

如果你问如何用$ game ['name'] ['fullname']的值替换{$ game.name.fullname},我的第一个建议是不允许模板包含任何旧变量(您不希望访问像$ secret_password这样的变量),但要创建一个可以包含的值数组。

看看这个:

<?php

$games = array(
    'game' => array(
        'name' => array(
            'fullname' => 'test'
        )
    )
);

$matches = array();
preg_match('/{\$([^.]+)\.([^.]+)\.([^}]+)}/', '{$game.name.fullname}', $matches);

var_dump($matches);

echo '<hr/>';

echo $matches[1] .'<br/>';
echo $matches[2] .'<br/>';
echo $matches[3] .'<br/>';

echo '<hr/>';

echo $games[$matches[1]][$matches[2]][$matches[3]];

?>