dongnao2582 2018-05-24 10:13
浏览 6
已采纳

如何锚定数组中的句子

I want to anchor the sentence words that are in the array.

<?php
$names = array('sara', 'max', 'alex');
foreach ($names as $dt) {
    $name = '@' . $dt;
    $text = preg_replace('/(' . $name . '\s)/', ' <a href=' . $dt . '>\1</a> ', $text);
}
echo $text;
?>

when my sentence like this it works well.

 $text = "@sara @alex @max";

but when my sentence like this

$text = "hello @sara hello @max hello @alex"; 

it doesn't work well.

  • 写回答

1条回答 默认 最新

  • duanbu1998 2018-05-24 12:20
    关注

    Whatever the string you use, you don't reach a satisfactory outcome because:

    • a name at the end of the string isn't replaced
    • you obtain duplicate spaces around the replaced items
    • there's a trailing space at the end of the href attribute
    • you need one pass per name to proceed a single string

    That's why I suggest to do all replacements in one pass and to use a negative lookahead to check if the next character is a white-space or the end of the string:

    $text = "hello @sara hello @max hello @alex";
    
    $names = array('sara', 'max', 'alex');
    
    $pattern = '~@(' . implode('|', $names) . ')(?!\S)~';
    $text = preg_replace($pattern, '<a href="$1">$0</a>', $text);
    

    Note that you can replace (?!\S) with (?!\w) (or \b, depending of what characters are allowed in names).

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。