我在PHP中使用一个简单的正则表达式来解析自定义模板
$row = preg_replace_callback(
'/\^([^\^]+)\^/', create_function ('$m', 'global $fields_ar; return $fields_ar{$m[1]};'),
$template
);
基本上,两个^之间的所有内容都用相应的变量名称值代替,例如如果$ template是:
<td>^title_source^ by ^author_source^<br/>
和
$fields_ar['title_source'] == 'my title' and $fields_ar['author_source'] == 'my author'
$ row成为:
<td>my title by my author<br/>
Everythings工作正常,但我想更改分隔符;而不是^,它有可能被包含在其他两个^之间,我想使用一个字符串,例如然而,“sel3ction”:
$row = preg_replace_callback(
'/sel3ction([^sel3ction]+)sel3ction/', create_function ('$m', 'global $fields_ar; return $fields_ar{$m[1]};'),
$template
);
不起作用;我很确定问题出现在消极部分。
有什么建议吗?
我知道这不是一个“干净”的方法,因为即使是最奇怪的字符串也可能很棘手,但目前我想尝试使用这种方法。如果您有更标准的解决方案,当然是受欢迎的。
谢谢!
答案 0 :(得分:1)
使用延迟量词(.
)匹配?
时,您可以告诉您的表达不要贪婪:
/sel3ction(.+?)sel3ction/
这告诉正则表达式引擎不要匹配.
之后(在这种情况下,“sel3ction”)与其他可能匹配的内容。