English 中文(简体)
返回字符串第一次出现之前和之后的单词
原标题:
  • 时间:2009-01-14 01:07:40
  •  标签:

我有一个来自搜索查询的文本主体,让我们称之为 $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来获取其长度,这将让您...

  • Create one array from the beginning of the text to the search term and then display the last word in that array and,
  • Create a second array from the words after 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 ...




相关问题
热门标签