如何避免将href添加到字符串中的重叠关键字?

Xenotic

使用以下代码:

$text = "أطلقت غوغل النسخة المخصصة للأجهزة الذكية العاملة بنظام أندرويد من الإصدار “25″ لمتصفحها الشهير كروم.ولم تحدث غوغل تطبيق كروم للأجهزة العاملة بأندرويد منذ شهر تشرين الثاني العام الماضي، وهو المتصفح الذي يستخدمه نسبة 2.02% من أصحاب الأجهزة الذكية حسب دراسة سابقة. ";
$tags = "غوغل, غوغل النسخة, كروم";
$tags = explode(",", $tags);
foreach($tags as $k=>$v) {
    $text = preg_replace("/\b{$v}\b/u","<a href=\"index.php?s=news&tag=$0\">$0</a>",$text, 1);
}
echo $text;

将给出以下结果:

I <a href="index.php?s=news&tag=<a href="index.php?s=news&tag=love">love</a> <a href="index.php?s=news&tag=PHP">PHP</a>">love PHP</a>, but I am <a href="index.php?s=news&tag=facing">facing</a> a problem

请注意,我的文字是阿拉伯语。

卡西米尔和希波吕特

方法是一次性完成所有操作。这个想法是建立一个带有标签交替的模式。要使这种方式有效,您必须在对标签进行排序之前,因为正则表达式引擎将在成功的第一个替代项处停止(否则,即使后面紧跟着“ php”,“ love”也将始终匹配,而“ love php”将永远不会匹配) )。

要将替换限制为每个单词的第一次出现,您可以在找到标记后将其从数组中删除,然后测试替换回调函数内部数组中是否始终存在该标记:

$text = 'I love PHP, I love  love but I am facing a problem';
$tagsCSV = 'love, love php, facing';

$tags = explode(', ', $tagsCSV);

rsort($tags);

$tags = array_map('preg_quote', $tags);

$pattern = '/\b(?:' . implode('|', $tags) . ')\b/iu';

$text = preg_replace_callback($pattern, function ($m) use (&$tags) {
    $mLC = mb_strtolower($m[0], 'UTF-8');
    if (false === $key = array_search($mLC, $tags))
        return $m[0];

    unset($tags[$key]);
    return '<a href="index.php?s=news&tag=' . rawurlencode($mLC)
         . '">' . $m[0] . '</a>';
}, $text);

注意:建立网址时,您必须编码特殊字符,这就是为什么我使用preg_replace_callback而不是preg_replace能够使用的原因rawurlencode

如果您必须处理utf8编码的字符串,则需要在模式中添加u修饰符,并需要替换strtolowermb_strtolower

preg_split方法

$tags = explode(', ', $tagsCSV);

rsort($tags);

$tags = array_map('preg_quote', $tags);

$pattern = '/\b(' . implode('|', $tags) . ')\b/iu';

$items = preg_split($pattern, $text, -1, PREG_SPLIT_DELIM_CAPTURE);

$itemsLength = count($items);
$i = 1;
while ($i<$itemsLength && count($tags)) {
    if (false !== $key = array_search(mb_strtolower($items[$i], 'UTF-8'), $tags)) {
        $items[$i] = '<a href="index.php?s=news&tag=' . rawurlencode($tags[$key])
                   . '">' . $items[$i] . '</a>';
        unset($tags[$key]);
    }
    $i+=2;
}

$result = implode('', $items);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将关键字排除添加到 jQuery 中的 indexOf 关键字匹配

来自分类Dev

自动将链接添加到关键字字符串

来自分类Dev

如何在字符串中查找关键字

来自分类Dev

#!/ usr / bin / perl,如何将字符串中的关键字与数字匹配

来自分类Dev

在Python中,最简单的方法是将包含关键字对的列表添加到字典中?

来自分类Dev

如何将子字符串添加到字符串中

来自分类Dev

如何防止HTMLHelper :: link()将关键字添加到URL路径?(CakePHP 2.5)

来自分类Dev

将3字符串添加到3变量中

来自分类Dev

将字符添加到sql中的字符串

来自分类Dev

将字符串扩展为关键字

来自分类Dev

如何基于R中的一组关键字将数字代码分配给字符串

来自分类Dev

Dart-如何强制将地图关键字包含在列表字符串中

来自分类Dev

如何将csv字符串转换为列并通过Excel中的特定关键字进行过滤?

来自分类Dev

如何按特定关键字分割字符串?

来自分类Dev

如何用“ like”关键字匹配字符串?

来自分类Dev

如何按特定关键字分割字符串?

来自分类Dev

如何使用“-”关键字分割字符串?

来自分类Dev

如何从字符串参数获得关键字参数?

来自分类Dev

Groovy中带字符串的* in *关键字

来自分类Dev

Dart中的this关键字,字符串插值

来自分类Dev

在字符串中的关键字之前删除“ \ n”

来自分类Dev

随机替换字符串中的关键字

来自分类Dev

字符串中的Django queryset关键字

来自分类Dev

检查关键字是否在字符串中

来自分类Dev

从python中的字符串输出匹配关键字

来自分类Dev

如何将字符串添加到数组?

来自分类Dev

如何防止PowerShell将\添加到字符串

来自分类Dev

如何将字符串添加到数组?

来自分类Dev

如何将信息添加到字符串

Related 相关文章

  1. 1

    将关键字排除添加到 jQuery 中的 indexOf 关键字匹配

  2. 2

    自动将链接添加到关键字字符串

  3. 3

    如何在字符串中查找关键字

  4. 4

    #!/ usr / bin / perl,如何将字符串中的关键字与数字匹配

  5. 5

    在Python中,最简单的方法是将包含关键字对的列表添加到字典中?

  6. 6

    如何将子字符串添加到字符串中

  7. 7

    如何防止HTMLHelper :: link()将关键字添加到URL路径?(CakePHP 2.5)

  8. 8

    将3字符串添加到3变量中

  9. 9

    将字符添加到sql中的字符串

  10. 10

    将字符串扩展为关键字

  11. 11

    如何基于R中的一组关键字将数字代码分配给字符串

  12. 12

    Dart-如何强制将地图关键字包含在列表字符串中

  13. 13

    如何将csv字符串转换为列并通过Excel中的特定关键字进行过滤?

  14. 14

    如何按特定关键字分割字符串?

  15. 15

    如何用“ like”关键字匹配字符串?

  16. 16

    如何按特定关键字分割字符串?

  17. 17

    如何使用“-”关键字分割字符串?

  18. 18

    如何从字符串参数获得关键字参数?

  19. 19

    Groovy中带字符串的* in *关键字

  20. 20

    Dart中的this关键字,字符串插值

  21. 21

    在字符串中的关键字之前删除“ \ n”

  22. 22

    随机替换字符串中的关键字

  23. 23

    字符串中的Django queryset关键字

  24. 24

    检查关键字是否在字符串中

  25. 25

    从python中的字符串输出匹配关键字

  26. 26

    如何将字符串添加到数组?

  27. 27

    如何防止PowerShell将\添加到字符串

  28. 28

    如何将字符串添加到数组?

  29. 29

    如何将信息添加到字符串

热门标签

归档