我们, 我想替换一个文本,添加特定单词的特定链接。 所以,我创建了一个这样的动态数组:
$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]。
如何完全匹配?
非常感谢!
答案 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);