需要PHP正则表达式

需要PHP正则表达式,php,regex,preg-replace,Php,Regex,Preg Replace,好的,我这里有一个正则表达式: $text = preg_replace('/\{\$(\w+)\}/e', '$params["$1"]', $text); $params=一个数组,其中键='scripturl',值=替换它的内容。 因此,一个示例文本是{$scripturl},通过它可以得到”$脚本URL。”当我将一个数组传递给$params时,该数组如下所示: array('scripturl' => '\' . $scripturl . \''); 但是我也需要它来支持花括号

好的,我这里有一个正则表达式:

$text = preg_replace('/\{\$(\w+)\}/e', '$params["$1"]', $text);
$params=一个数组,其中键='scripturl',值=替换它的内容。 因此,一个示例文本是{$scripturl},通过它可以得到
”$脚本URL。”当我将一个数组传递给$params时,该数组如下所示:

array('scripturl' => '\' . $scripturl . \'');
但是我也需要它来支持花括号{}中的括号

所以我需要这个:
{$context[forum_name]}
也被这个regex捕获

因此,类似这样的方法应该有效:

array('context[forum_name]' => '\' . $context[\'forum_name\'] . \'');
因此它需要返回
”$上下文[“论坛名称”]。'

如何在我使用的preg_替换中实现这一点

如果我需要为此创建一个单独的正则表达式,也可以

谢谢:)

您可能需要使用它,但是如果您可以使用
/e
eval修饰符,那就太好了

尝试将regexp更改为以下内容:

$text = preg_replace('/\{\$([\w\"\[\]]+)\}/e', '$params["$1"]', $text);

像这样的东西应该可以解决它。它将捕捉括号中的所有内容

编辑:

function replaceTemplateVariable($match){
  global $$match[1];
  return $$match[1];
}
preg_replace_callback('/\{[^\}]+\}/', 'replaceTemplateVariable', $text);

也有助于简化代码

在偏移量处编译失败:丢失)18@SoLoGHoST:谢谢,刚刚输入,没有运行,现在已修复。为什么“<代码>)
在+”之后,这是正确的位置吗?它不应该在
+
?@SoLoGHoST:the
标记替换组结束之前
([\w\“\[\]]+)
是它为替换而保存的位,一系列单词字母
(\w)
,这些字符
“[]
+
应用于字符类,表示需要一个或多个字符。这根本不起作用,它会删除所有字符,但是不能用任何东西替换它。@SoLoGHoST:很抱歉,实际上你想用变量的实际值替换它,我没有得到它,我已经编辑了我的答案,但我应该说,由于解决方案依赖于
global
它有点脏,我看到你编辑了你的答案。为什么使用这个方法比另一个更好?@RageZ+1人们总是抱怨PHP,而被认为是完全不可能的事情之一就是使用
$$
语法。倾向于使用“regexp-suck”,因此+1可以有效地以一行程序的方式使用这两个参数。@Orbling:nice我不知道
e
标志有用;-)Regex是正则表达式的缩写。“正则表达式”应该是“正则表达式”。好的,谢谢你的解释,你现在能用正则表达式解释一下吗?哈哈,j/k。谢谢:)