我有以下脚本用[amazon region=com asin=1234567]
替换我的字符串中的getAffiliateLink("com","1234567")
来触发PHP函数并显示一个特定的div:
$content = preg_replace_callback('/\[amazon region=([^\b]+) asin=([^\b]+)\]/', 'callback', $content);
function callback ($matches) {
print_r($matches);
return getAffiliateLink("$matches[1]","$matches[2]");
}
echo $content;
现在这完全有效..直到我的字符串中有多个[amazon region=com asin=1234567]
实例,每个实例都有不同的asin编号。
然后我得到以下印刷品:
Array (
[0] => [amazon region=com asin=B004QJ9458] [amazon region=com asin=B0080KWRI0]
[1] => com asin=B004QJ9458] [amazon region=com
[2] => B0080KWRI0
)
很明显,在查看上面的输出时出现了问题。如何更改我的代码以使其适用于特定字符串的不同实例?
答案 0 :(得分:0)
[^\b]
字符类匹配任何char,但匹配\ x08 char(BACKSPACE)。
您可以使用
修复模式$content = preg_replace_callback('/\[amazon region=(\S+) asin=(\S+)\]/', 'callback', $content);
请参阅LESS。
\S+
匹配1个或多个非空白字符。