PHP如何显示搜索引擎等搜索结果

时间:2014-06-05 14:50:15

标签: php mysql regex search replace

我的网站上有一个搜索页面 我不想在结果中显示整个句子,我想用“Google风格”来表示:
之前有5个字符,搜索单词突出显示,5个字符后...
等等,对于句子中的每个单词。

$teksto="bla1 bla2 bla3 bla4 bla5 Bingo bla6 bla7 bla8 bla9 bla10 Bingo bla11 bla12 Bingo bla13 bla14 bla15";
$serchu="bingo";
$teksto=preg_replace("/[\s]{1,}/is",' ',$teksto); // (form multispaces, breaklines, etc. to just 1 space)
echo preg_replace("/(.{0,5})($serchu)(.{0,5})/is"," ...$1<b>$2</b>$3... &nbsp;&nbsp;",$texto);

结果是:
bla1 bla2 bla3 bla4 ... bla5 Bingo bla6 ... bla7 bla8 bla9 b ... la10 Bingo bla1 ... 1 b ... la12 Bingo bla1 ... 3 bla14 bla15

我希望结果可能是:
... bla5 Bingo bla6 ...... la10 Bingo bla1 ...... la12 Bingo bla1 ...

换句话说,我不想在开头或结尾处 其他单词
MySQL解决方案也很感激。

1 个答案:

答案 0 :(得分:1)

尝试仅匹配匹配的单词并在其周围打印一些上下文,而不是替换内容。这将搜索$serchu的所有出现次数,其前后有5个字符,并将结果与​​&#34; ...&#34;介于它之间:

preg_match_all("/.....$serchu...../i", $teksto, $matches);
echo implode('...', $matches[0]);

结果:

 bla5 Bingo bla6...la10 Bingo bla1...la12 Bingo bla1

$serchu位于字符串的开头或结尾时,这不起作用,但我认为修复此方法比使用preg_replace更有成功。