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 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么