如何获取部分文本,包含短语/单词的字符串?

时间:2013-08-10 13:21:35

标签: php mysql

我在MySQL中有一个用PHP处理的数据库。在这个数据库中,我有一个长文本列。人们使用网站上的搜索工具搜索一些短语。它显示与此搜索匹配的项目。

现在,我的问题是如何获取包含他们搜索的短语的文本的一部分,以便他们可以看到它们是否是他们所寻找的?

例如:

Text: "this is some long text (...) about problems with jQuery and other JavaScript frameworks (...) so check it out"

现在我想换一句jQuery:

about problems with jQuery and other JavaScript frameworks

3 个答案:

答案 0 :(得分:1)

在MySQL中,您可以使用LOCATE(或INSTR)和SUBSTRING的组合:

SELECT SUBSTRING(col, LOCATE('jQuery', col) - 20, 40) AS snippet
FROM yourtable

这将从您的文字中选择一个40个字符的片段,在第一次出现'jQuery'之前从20个字符开始。

但是,它往往很慢。值得研究的替代方案:

  • 在PHP中使用类似的方法
  • 使用MySQL的全文搜索功能(不确定是否有任何帮助),或者像solr一样的单独的全文搜索引擎。

答案 1 :(得分:0)

您可以使用PHP函数strpos()

答案 2 :(得分:0)

您可以使用strpos()查找您要查找的词组的第一个匹配项。然后向后减去一个小于第一次出现的数字。然后拨打mb_strimwidth()。这是一个示例代码

我们会搜索' 网站这个词。

//Your string
$string = "Stackoverflow is the best *website* there ever is and ever will be. I find so much information here. And its fun and interactive too";

// first occurence of the word '*website*' - how far backwards you want to print
$position=intval(strpos($string, '*website*'))-50;
$display_text=mb_strimwidth($string, $position, 300, '...<a href="link_here">more</a>'); 
//we will print 300 characters only for display.

echo $display_text;

像老板一样。