我已经尝试了无数种不同的正则表达式,但是这一个我就是理解不了(承认很多正则表达式超出了我的掌握范围)。
在我的文本中,我有这样的变量:
{{$one}}
{{$three.four.five}}
{{$six.seven}}
我有一个包含所有替换内容的数组('one'的索引是'one'等等),但有些可能缺失。
如果存在于数组中,则希望替换文本,否则保留原样。
我该使用什么正则表达式来preg_match_all $text变量中的代码段中的变量,在适当情况下从$replace进行替换并在浏览器中输出?
<?php
$replaces = array('testa.testb.testc' => '1', 'testc.testa' => '2', 'testf' => '3');
$text = '{{$testa.testb.testc}}<br>{{$testc.testa}}<br>{{$testf}}<br>{{$aaaaa}}<br>';
preg_match_all('/\{\{\$(\w+)\}\}/e', $text, $matches);
foreach($matches as $match)
{
$key = str_replace('{{$', '', $match);
$key = str_replace('}}', '', $key);
if(isset($replaces[$key]))
$text = str_replace($match, $replaces[$key], $text);
}
// I want to end up echo'ing:
// 1<br>2<br>3<br>{{$aaaaa}}<br>
echo $text;
?>
http://codepad.viper-7.com/4INvEE
This:
'/\{\{\$(\w+)\}\}/e'
就像代码片段中的一样,这是我能做到的最接近的。
它也必须与变量名中的“does”一起工作。
非常感谢您的所有帮助!
$matches
里面有什么了吗?如果你看一下我在你的问题中添加的链接,你会注意到你的loop
没有像你想象的那样工作。另外,你也没有允许在捕获中加入.
。 - Jared Farrish