如何使用正则表达式将{$ game.name.fullname}转换为$ game ['name'] ['fullname']。
感谢
答案 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]];
?>