我正在开发一个小型CMS,它接受一个开发人员stdClass
对象并相应地处理它。 stdClass
包含数组和其他对象。其中一个对象是变量对象。可能有很多变量对象。
我将解释这一点,而不是显示代码,以减少混乱。开发人员指定一个变量和一组可以进入该变量的值。用户指定的值可能是多维数组。这是如何创建变量对象的示例:
//Add variable1
$variable = $variables[] = new stdClass;
$variable->name = 'var1'; $variable->generator = 'function'; $variable->value = 'v'; $variable->enum = array (array('Mars', 9.8), array('Earth', 3.77)); $variable->description; $variable->callback = 'callback_function';
//Add variable2
$variable = $variables[] = new stdClass;
$variable->name = 'var1'; $variable->generator = 'function'; $variable->value = 'v'; $variable->enum = array (array('Mars', 9.8), array('Earth', 3.77)); $variable->description; $variable->callback = 'callback_function';
在stdClass中的某个时刻,开发人员必须指定变量的放置位置。占位符模板如下所示:$variables[0]
选择第一个变量或$variables[0][1]
选择第一个变量,然后选择该变量中的第一个元素。我希望这是有道理的。
我必须提出一个PHP算法,它通过一段文本并用正确的值替换所有占位符。
我的解决方案
我开始使用:
preg_match_all(' / \ $ variables [[0-9a-zA-Z] +] /',$ text,$ matched_placeholders);
..但这只会与$variables[0]
匹配,我想扩展它以匹配变体,例如:$variables[0][1]
或$variables[0][2][0]
等。
一旦我将占位符放入数组并将变量值放入另一个数组中。我可以执行foreach
循环并替换所有占位符。
任何建议将不胜感激。我应该使用什么正则表达式模式来匹配此$variables[0][2][0]
...
答案 0 :(得分:0)
您的preg_match_all
功能类似于:
preg_match_all('/\$variables((\[[0-9a-zA-Z]+\])*)/', $text, $matched_placeholders);
这将匹配:
$variables
$variables[#]
$variables[#][#]
并将[#][#][#]...
部分存储在$matched_placeholders[1]
使用$text = '$variables[0][1] or $variables[0][2][0]';
进行测试:
Array (
[0] => Array (
[0] => $variables[0][1]
[1] => $variables[0][2][0]
)
[1] => Array (
[0] => [0][1]
[1] => [0][2][0]
) // The rest is just "noise"
[2] => Array ( [0] => [1] [1] => [0] )
)
例如,如果您想重命名变量(因为我不知道您实际上想要做什么,只是帮助您使用正则表达式部分),您可以这样做:
$text = preg_replace('/\$variables((\[[0-9a-zA-Z]+\])*)/', '\$newvar$1', $text);
将用$variables
替换$newvar
的所有出现。
答案 1 :(得分:-1)
这将有效: -
str.replaceAll(,);