【问题标题】:php limiting search results in textphp限制文本中的搜索结果
【发布时间】:2017-04-26 19:55:49
【问题描述】:

经过一番搜索和谷歌搜索后,我找到了用于在类似于以下文本的文本中突出显示和限制搜索结果的代码:

$text = preg_replace("/^.*?(.{0,100})\b($word)\b(.{0,100}).*?$/mi", '\1<span class="highlight_word">\2</span>\3', $text);

不幸的是,即使$word 的内容按预期放置在范围内,我总是会得到完整的$text

我现在的问题是如何将$text 的内容减少到仅在搜索结果前后显示 100 个字符($word 的内容)。 我还使用门户网站检查了几个变体中的正则表达式并得到了所需的结果。尽管如此,我的 php 代码并没有显示预期的内容。 任何帮助都非常感谢,因为我认为我这边有一个非常愚蠢的错误。

【问题讨论】:

  • 这和mysql有什么关系? $text 是什么?打算做什么以及显示什么?
  • 在你的preg_replace之后,获取$word的位置,然后使用substr获取之前的100和之后的100。 IOW,如果 $p1 = $word 在 $text 中的位置,$rslt = substr($text,$p1 - 100, 200 + strlen($word)) 或类似的。

标签: php html regex


【解决方案1】:

当您使用m 标志时,^$ 匹配行的开头和结尾,而不是字符串的开头和结尾。所以这一次只匹配和替换$text 的一行,不匹配的行将被单独处理。

如果要跨多行匹配,请使用s 修饰符。这允许. 匹配换行符,但^$ 仍然只匹配$text 的开头和结尾。

【讨论】:

    猜你喜欢
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多