Php 正则表达式,两个字符串之间出现多次的任意字符串

Php 正则表达式,两个字符串之间出现多次的任意字符串,php,regex,templates,Php,Regex,Templates,我在PHP中使用一个简单的正则表达式来解析自定义模板 $row = preg_replace_callback( '/\^([^\^]+)\^/', create_function ('$m', 'global $fields_ar; return $fields_ar{$m[1]};'), $template ); 基本上,2^之间的所有内容都用相应的变量名值替换,例如,如果$template为: <td>^title_source^ by ^autho

我在PHP中使用一个简单的正则表达式来解析自定义模板

$row = preg_replace_callback(
    '/\^([^\^]+)\^/', create_function ('$m', 'global $fields_ar; return $fields_ar{$m[1]};'),
    $template
    );
基本上,2^之间的所有内容都用相应的变量名值替换,例如,如果$template为:

 <td>^title_source^ by ^author_source^<br/>
$row变为:

<td>my title by my author<br/>
不起作用;我敢肯定问题出在消极方面

有什么建议吗

我知道这不是一种“干净”的方法,因为即使是最奇怪的字符串也可能很棘手,但目前我想尝试使用这种方法。如果您有更标准的解决方案,当然欢迎


谢谢

在使用惰性量词(
)进行匹配时,可以告诉表达式不要贪婪:

这告诉正则表达式引擎不要将
之后的内容(在本例中为“sel3ction”)与其他可能匹配的内容相匹配。

,因此无需在此处使用
create\u函数。
<td>my title by my author<br/>
$row = preg_replace_callback(
    '/sel3ction([^sel3ction]+)sel3ction/', create_function ('$m', 'global $fields_ar; return $fields_ar{$m[1]};'),
    $template
    );
/sel3ction(.+?)sel3ction/