【问题标题】:preg_replace Array with HTML tags?preg_replace 带有 HTML 标签的数组?
【发布时间】:2013-10-31 21:30:22
【问题描述】:

我有一个已转换为数组的字符串。我转换的相同字符串是来自搜索的关键字,它与一大段文本中的关键字匹配。

我想使用数组,使用其中的关键字将 html 标记添加到具有相似关键字的文本块中。

例如: 关键词:狗、猫、牛

之前的文字:我有两只狗、四只猫和二十头牛。

后面的文字:我有两只、四只和二十只

我的文本块在一个变量中。

但我不确定我到底需要什么正则表达式,与 preg_replace(); 一起使用。

<?php
    echo preg_replace($text, <b></b>, $keywords);
?>

我的方向是否正确?

【问题讨论】:

    标签: php regex


    【解决方案1】:

    通过使用| 连接单词,创建一个使用交替匹配任何单词的正则表达式。在替换字符串中,使用$0 来引用匹配到的文本部分。

    $regexp = '/\b(' . implode('|', $keywords) . ').*?\b/i';
    echo preg_replace($regexp, '<b>$0</b>', $text);
    

    DEMO

    【讨论】:

    • 谢谢,它输出了文本,但是没有一个关键字被 标签包裹,我错过了什么吗?
    • 适合我,看演示。
    • 我的问题是我的关键字都是小写和大写,文本可能反之亦然。如果上或下,如何调整正则表达式以匹配文本?
    • i 修饰符添加到正则表达式以使其不区分大小写。这应该是显而易见的。我已经更新了答案。
    • 谢谢!就是这样。正则表达式让我很困惑。
    【解决方案2】:

    您可以使用此代码:

    echo preg_replace('/\b((?:cat|dog|cow)\S*)/i', `<b>$1</b>`, $keywords);
    

    【讨论】:

    • 你可以用\S代替[^\s]
    猜你喜欢
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    相关资源
    最近更新 更多