尝试替换一个字符串,但它似乎只匹配第一个匹配项,并且如果我有另一个匹配项,它不匹配任何内容,所以我认为我需要添加某种类型的结尾分隔符?PHP - preg_replace不匹配多个匹配项
我的代码:
$mappings = array(
'fname' => $prospect->forename,
'lname' => $prospect->surname,
'cname' => $prospect->company,
);
foreach($mappings as $key => $mapping) if(empty($mapping)) $mappings[$key] = '$2';
$match = '~{(.*)}(.*?){/.*}$~ise';
$source = 'Hello {fname}Default{/fname} {lname}Last{/lname}';
// $source = 'Hello {fname}Default{/fname}';
$text = preg_replace($match, '$mappings["$1"]', $source);
所以,如果我用的是真实评价的$源,它匹配得很好,如果我的代码目前使用上述那里的2场比赛的一个,它不匹配任何东西我得到一个错误:
Message: Undefined index: fname}Default{/fname} {lname
Filename: schedule.php(62) : regexp code
所以我说得对,我需要提供一个结束分隔符或什么?
感谢, 基督教
您正在使用'。*?',但留下其他匹配''*'贪婪。 (提示:如果有明显的字符允许或禁止,总是限制模式。) – mario
谢谢马里奥 - 错过了一个。关于主要问题的任何想法? :) –
个人而言,我会使用['{([^}] +)}(。*?){/ \ 1}'](http://rubular.com/r/6HCgvUKIB7)。 – NullUserException