我有一个来自搜索查询的文本主体,让我们称之为 $body。现在,我想让脚本找到搜索查询 $query 的第一个出现。我知道可以使用 strripos 找到这个第一次出现。
一旦发现,我希望脚本返回字符串第一次出现之前的几个单词,以及第一次出现结束后的几个单词。
本质上,我正在尝试做谷歌在其搜索结果中所做的。
我应该从哪里开始呢?问题是我不断地返回词的一部分。
我有一个来自搜索查询的文本主体,让我们称之为 $body。现在,我想让脚本找到搜索查询 $query 的第一个出现。我知道可以使用 strripos 找到这个第一次出现。
一旦发现,我希望脚本返回字符串第一次出现之前的几个单词,以及第一次出现结束后的几个单词。
本质上,我正在尝试做谷歌在其搜索结果中所做的。
我应该从哪里开始呢?问题是我不断地返回词的一部分。
你可以:
$words = explode(" ", $body);
创建一个包含$body中所有单词的数组。
$index = array_search($query, $words);
$string = $words[$index - 1]." ".$words[$index]." ".$words[$index + 1];
但是,如果查询由多个单词组成,则可能会遇到麻烦。
分割 - 数组搜索
我不懂 PHP,但如果你能使用正则表达式,你可以使用以下的一个:
string query = "search";
int numberOfWords = 2;
Regex(
"([^ ]+s+){"
+ numberOfWords
+ "}w*"
+ query
+ "w*(s+[^ ]+){"
+ numberOfWords
+ "}"
);
在我看来,您可以使用strpos
来查找搜索词的开头,使用strlen
来获取其长度,这将让您...
strpos
+ strlen
and display
the first word in that array.或者,如果您已经获取了搜索项之前和之后的一些字符,如果您将其爆炸成一个数组,您可以提取出一个或两个单词。
两边加上几个字怎么样?
<?php
$subject= "Four score and seven years ago, our forefathers brought forth upon this continent a new nation";
$pattern= "/(w+s){3}forth(sw+){3}/";
preg_match($pattern, $subject, $matches);
echo("... $matches[0] ...");
给予
... our forefathers brought forth upon this continent ...