我试图用preg_replace替换PHP中的单词。在执行代码时,它将将“汽车燃料盖”替换为“上限”,而不是“汽车零部件”。
$string = "fuel cap for car";
$find = array('cap', 'fuel cap for car');
$replace = array('hat', 'auto parts');
echo preg_replace($find, $replace, $string);所以,我已经尝试过一种不同的方法。我将原始值和替换值存储在数据库中,例如:
表格
汽车,摩托车,汽车,汽车,零件,活塞,摩托车,摩托车,金属,燃料帽,替换:汽车零件
绳子是:汽车的燃油帽。
守则是:
$result = mysqli_query($connect, $query);
while($row2 = mysqli_fetch_assoc($result)){
if(preg_match('/\b'.$row[suggestions].'\b/i', $string)){
$string = $row['description'];但是,它正在用“帽子”代替字符串,而不是“汽车零件”
发布于 2020-12-18 10:31:11
如果$find数组不包含太多项,则可以通过从$find和$replace数组创建关联数组来解决问题,并从数组项构建单个正则表达式,即包含以所有字符串作为替代项的单个组的正则表达式,然后在找到匹配时用相应的$replace值替换。
$string = "fuel cap for car";
$find = array('cap', 'fuel cap for car');
$replace = array('hat', 'auto parts');
$arr = array_combine($find, $replace);
usort($find, function($a, $b) { // Longer phrases must come first
return strlen($b) - strlen($a);
});
echo preg_replace_callback('~\b(?:' . implode('|', $find) . ')\b~', function($x) use ($arr) {
return $arr[$x[0]];
}, $string);
// => auto partshttps://stackoverflow.com/questions/65354168
复制相似问题