Preg_replace 含数组元素
Preg_replace with array element
我有如下数组:
function func($name){
$arr = [
'dog' => 'boo|pet|chinsu|lu',
'man' => 'david|peter|john|smith',
'woman' => 'marry|daisy|anna|tailor'
];
foreach($arr as $k=>$v) {
$name = preg_replace("/($v)/i",$k,$name);
}
return $name;
}
echo func('john'); //return 'man' => OK
echo func('peter'); //return 'doger' => Not OK
应该return'man'而不是'doger',但是'pet'也存在'peter'。
如何解决此问题但仍在使用 preg_replace?
只需在您的正则表达式中添加单词边界 \b
:
$name = preg_replace("/\b$v\b/i", $k, $name);
// here __^^ ^^
我有如下数组:
function func($name){
$arr = [
'dog' => 'boo|pet|chinsu|lu',
'man' => 'david|peter|john|smith',
'woman' => 'marry|daisy|anna|tailor'
];
foreach($arr as $k=>$v) {
$name = preg_replace("/($v)/i",$k,$name);
}
return $name;
}
echo func('john'); //return 'man' => OK
echo func('peter'); //return 'doger' => Not OK
应该return'man'而不是'doger',但是'pet'也存在'peter'。
如何解决此问题但仍在使用 preg_replace?
只需在您的正则表达式中添加单词边界 \b
:
$name = preg_replace("/\b$v\b/i", $k, $name);
// here __^^ ^^