Php preg_replace()特定文本与数组中的值

Php preg_replace()特定文本与数组中的值,php,regex,Php,Regex,为糟糕的标题和解释道歉 假设我有这样一个数组: $myArray = array( "name" => "Hello", "description" => "World" ); <h1>{name}</h1> <p>{description}</p> $str = '<h1>{name}</h1> <p>{description}</p>'; $myArray = a

为糟糕的标题和解释道歉

假设我有这样一个数组:

$myArray = array(
    "name" => "Hello",
    "description" => "World"
);
<h1>{name}</h1>
<p>{description}</p>
$str = '<h1>{name}</h1>
<p>{description}</p>';

$myArray = array(
    "name" => "Hello",
    "description" => "World"
);

echo preg_replace_callback('/\{(\w+)}/', function($match) use ($myArray){
    $matched = $match[0];
    $name = $match[1];
    return isset($myArray[$name]) ? $myArray[$name] : $matched;
}, $str);
一些HTML如下所示:

$myArray = array(
    "name" => "Hello",
    "description" => "World"
);
<h1>{name}</h1>
<p>{description}</p>
$str = '<h1>{name}</h1>
<p>{description}</p>';

$myArray = array(
    "name" => "Hello",
    "description" => "World"
);

echo preg_replace_callback('/\{(\w+)}/', function($match) use ($myArray){
    $matched = $match[0];
    $name = $match[1];
    return isset($myArray[$name]) ? $myArray[$name] : $matched;
}, $str);

首先,让我们构造正则表达式:

$re = implode('|', array_map(function($el) { 
                     return '{' . $el . '}'; 
                   }, array_keys($myArray));
现在我们准备好摇滚了:

$result = preg_replace_callback(
  "/$re/", 
  function($match) use($myArray) { 
    return $myArray[$match[0]]; 
  } , $input
);

您可以在vanilla PHP中这样做:

$myArray = array(
    "name" => "Hello",
    "description" => "World"
);
<h1>{name}</h1>
<p>{description}</p>
$str = '<h1>{name}</h1>
<p>{description}</p>';

$myArray = array(
    "name" => "Hello",
    "description" => "World"
);

echo preg_replace_callback('/\{(\w+)}/', function($match) use ($myArray){
    $matched = $match[0];
    $name = $match[1];
    return isset($myArray[$name]) ? $myArray[$name] : $matched;
}, $str);

是的,可以使用
preg\u replace\u回调
。我相信某个善良的灵魂会在一分钟内给你codez。我不认为使用regex是最明智的选择,它可以相当容易地编写一个函数来解析文本并从地图中放置键的实例,但我个人认为这将是一条路。@建议的函数会自动解析文本吗?没有regexps?@mudasobwa不是自动生成的,不是,但是使用regex对我来说似乎太过分了。如果您知道它总是包含在
{}
中,并且您的键中从来没有
{
}
,那么您只需要在构建子字符串替换标记列表后扫描文本。这可能是因为没有真正使用php,以及其他经验中的一个习惯,但我不喜欢在所有可能的机会中使用regex,这似乎有些过分。我确实喜欢下面的ouzo goodies解决方案,它将上面不太好的表达式抽象掉了。我只需要这个小类!谢谢