使用数组

时间:2016-12-15 15:00:37

标签: php arrays preg-replace

我们, 我想替换一个文本,添加特定单词的特定链接。 所以,我创建了一个这样的动态数组:

$replace = array  (
    "ferrari" => '<a href="x">ferrari</a>',
    "ferrari 2" => '<a href="x">ferrari 2</a>'
     etc.    
)

我找到了一种使用以下方法替换文本的方法:

preg_replace(array_keys($replace), array_values($replace), $subject)

但如果在$subject中有字符串&#34;法拉利2&#34;它将被取代 [法拉利]代替[法拉利2]。

如何完全匹配?

非常感谢!

3 个答案:

答案 0 :(得分:0)

将订单更改为:

$replace = array  (
   "ferrari 2" => '<a href="x">ferrari 2</a>'
   "ferrari" => '<a href="x">ferrari</a>', 
)

通常在更换时,只需将顺序更改为最后一个键最后解决的位置。

答案 1 :(得分:0)

您可以使用以下解决方案:

$s = "he has a ferrari and ferrari 2 and what not."; // SAMPLE STRING
$replace = array  (                                  // REPLACEMENTS ARRAY
    "ferrari" => '<a href="x">ferrari</a>',
    "ferrari 2" => '<a href="x">ferrari 2</a>'
);
$keys = array_map('strlen', array_keys($replace));  // SORTING BY KEY LENGTH 
array_multisort($keys, SORT_DESC, $replace);        //   IN DESCENDING ORDER

$pat = '~' . implode("|", array_keys($replace)) . '~'; // BUILDING A PATTERN
echo $pat . "\n";  // => ~ferrari 2|ferrari~ - matches either ferrari 2 or ferrari

$res = preg_replace_callback($pat, function($m) use ($replace) { // REPLACING...
       return isset($replace[$m[0]]) ? $replace[$m[0]] : $m[0];  // IF THE KEY EXISTS,
    }, $s);                                // REPLACE WITH VALUE, ELSE KEEP THE MATCH
echo $res;  // => he has a <a href="x">ferrari</a> and <a href="x">ferrari 2</a> and what not.

请参阅PHP demo

答案 2 :(得分:0)

我想var $ subject就是这样的:

$subject = 'ferrari ferrari 2';

试试这个:

$replace = array  (
    "/ferrari(?!\s+\d+)/" => '<a href="x">ferrari</a>',
    "/ferrari 2/" => '<a href="x">ferrari 2</a>'
);
echo preg_replace(array_keys($replace), array_values($replace), $subject);