preg_replace_callback()在多个实例时返回错误的数组

时间:2018-01-22 23:44:28

标签: php preg-replace preg-replace-callback

我有以下脚本用[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 
)

很明显,在查看上面的输出时出现了问题。如何更改我的代码以使其适用于特定字符串的不同实例?

1 个答案:

答案 0 :(得分:0)

[^\b]字符类匹配任何char,但匹配\ x08 char(BACKSPACE)。

您可以使用

修复模式
$content = preg_replace_callback('/\[amazon region=(\S+) asin=(\S+)\]/', 'callback', $content);

请参阅LESS

\S+匹配1个或多个非空白字符。