首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >preg_replace匹配精确字

preg_replace匹配精确字
EN

Stack Overflow用户
提问于 2020-12-18 09:00:41
回答 1查看 64关注 0票数 2

我试图用preg_replace替换PHP中的单词。在执行代码时,它将将“汽车燃料盖”替换为“上限”,而不是“汽车零部件”。

代码语言:javascript
运行
复制
$string = "fuel cap for car";

$find = array('cap', 'fuel cap for car');
$replace = array('hat', 'auto parts');

echo preg_replace($find, $replace, $string);

所以,我已经尝试过一种不同的方法。我将原始值和替换值存储在数据库中,例如:

表格

汽车,摩托车,汽车,汽车,零件,活塞,摩托车,摩托车,金属,燃料帽,替换:汽车零件

绳子是:汽车的燃油帽。

守则是:

代码语言:javascript
运行
复制
$result = mysqli_query($connect, $query);
    while($row2 = mysqli_fetch_assoc($result)){
if(preg_match('/\b'.$row[suggestions].'\b/i', $string)){
$string = $row['description'];

但是,它正在用“帽子”代替字符串,而不是“汽车零件”

EN

回答 1

Stack Overflow用户

发布于 2020-12-18 10:31:11

如果$find数组不包含太多项,则可以通过从$find$replace数组创建关联数组来解决问题,并从数组项构建单个正则表达式,即包含以所有字符串作为替代项的单个组的正则表达式,然后在找到匹配时用相应的$replace值替换。

PHP演示

代码语言:javascript
运行
复制
$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 parts
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65354168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档