Php 匹配并替换字符串中的占位符

Php 匹配并替换字符串中的占位符,php,arrays,regex,Php,Arrays,Regex,我正在开发一个小型CMS,它接受一个开发者stdClass对象并相应地处理它。stdClass包含数组和其他对象。其中一个对象是变量对象。可能有很多变量和对象 我将只是解释这一点,而不是显示代码,以减少混淆。开发人员指定一个变量和一组可能进入该变量的值。用户指定的值可能是多维数组。这是如何创建variables对象的示例: //Add variable1 $variable = $variables[] = new stdClass; $variable->name = 'var1'; $

我正在开发一个小型CMS,它接受一个开发者
stdClass
对象并相应地处理它。
stdClass
包含数组和其他对象。其中一个对象是变量对象。可能有很多变量和对象

我将只是解释这一点,而不是显示代码,以减少混淆。开发人员指定一个变量和一组可能进入该变量的值。用户指定的值可能是多维数组。这是如何创建variables对象的示例:

//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_占位符)

…但这将只匹配
$variables[0]
,我正试图扩展它以匹配变体,例如:
$variables[0][1]
$variables[0][2][0]
,等等

一旦我将占位符放入一个数组,将变量值放入另一个数组。我可以执行
foreach
循环并替换所有占位符


如有任何建议,将不胜感激。我应该使用什么正则表达式模式来匹配此
$variables[0][2][0]
..

您的
preg\u match\u all
函数将类似于:

preg_match_all('/\$variables((\[[0-9a-zA-Z]+\])*)/', $text, $matched_placeholders);
这将匹配:

  • $variables
  • $variables[#]
  • $variables[#][#]
  • 等等
并将
[#][#][#][#]…
部分存储在
$matched_占位符[1]

使用
$text='$variables[0][1]或$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] )
)
例如,如果您想重命名您的变量(因为我不知道您实际上在做什么,只是在帮助您处理regex部分),您可以执行以下操作:

$text = preg_replace('/\$variables((\[[0-9a-zA-Z]+\])*)/', '\$newvar$1', $text);
将所有出现的
$variables
替换为
$newvar

这将起作用:-

str.replaceAll(,)


嗨,谢谢你的意见。你真的帮了大忙。问题解决了!