返回第一次出现字符串之前和之后的单词

时间:2009-01-14 01:07:40

标签: php string

我有一个从搜索查询返回的文本正文,我们称之为$ body。现在,我想要做的是让脚本找到第一次出现的搜索查询$ query。我知道我可以通过strripos找到第一次出现这种情况。

一旦找到,我希望脚本在第一次出现字符串之前返回几个单词,并在第一次出现之后返回几个单词。

基本上我正在努力做谷歌用它的搜索结果做的事情。

关于我应该从哪里开始的任何想法?我的问题是我不断回复部分词语。

4 个答案:

答案 0 :(得分:3)

你可以:

$words = explode(" ", $body);

创建$ body中单词的数组。

$index  = array_search($query, $words);  
$string = $words[$index - 1]." ".$words[$index]." ".$words[$index + 1];

但如果查询超过1个单词,你就会遇到麻烦。

explode - array_search

答案 1 :(得分:2)

在我看来,您可以使用strpos查找搜索字词的开头,并使用strlen来查找其长度,这样可以让您...

  • 从头开始创建一个数组 搜索词的文本和 然后显示最后一个单词 数组和,
  • 从单词创建第二个数组 在strpos + strlen之后显示 该数组中的第一个单词。

或者,如果您在搜索词之前和之后已经掌握了一些字符数,那么如果您将这些字符分解为数组,则可以提取一两个字。

答案 2 :(得分:1)

我不懂PHP,但是如果你可以使用正则表达式,你可以使用以下方法:

string query = "search";
int numberOfWords = 2;
Regex(
       "([^ \t]+\s+){"
     + numberOfWords
     + "}\w*"
     + query
     + "\w*(\s+[^ \t]+){"
     + numberOfWords
     + "}"
);

答案 3 :(得分:0)

两边几句话怎么样:

<?php

$subject= "Four score and seven years ago, our forefathers brought forth upon this continent a new nation";
$pattern= "/(\w+\s){3}forth(\s\w+){3}/";

preg_match($pattern, $subject, $matches);

echo("... $matches[0] ...");

给出:

... our forefathers brought forth upon this continent ...