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

Php 返回字符串第一次出现之前和之后的单词,php,string,Php,String,我有一个从搜索查询返回的文本体,我们称之为$body。现在,我要做的是让脚本找到搜索查询$query的第一个匹配项。我知道我能在strripos身上找到第一次 一旦找到,我希望脚本在字符串第一次出现之前返回几个单词,在第一次出现之后返回几个单词 从本质上说,我正试图用谷歌的搜索结果做些什么 我该从哪里开始呢?我的问题是我一直在返回部分单词 你可以: $words = explode(" ", $body); 创建$body中所有单词的数组 $index = array_search($que

我有一个从搜索查询返回的文本体,我们称之为$body。现在,我要做的是让脚本找到搜索查询$query的第一个匹配项。我知道我能在strripos身上找到第一次

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

从本质上说,我正试图用谷歌的搜索结果做些什么

我该从哪里开始呢?我的问题是我一直在返回部分单词

你可以:

$words = explode(" ", $body);
创建$body中所有单词的数组

$index  = array_search($query, $words);  
$string = $words[$index - 1]." ".$words[$index]." ".$words[$index + 1];
但是,如果查询由超过1个单词组成,您将遇到麻烦


-

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

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

两边各说几句怎么样:

<?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] ...");

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

  • 从头创建一个数组 将文本添加到搜索词和 然后显示该字段中的最后一个单词 数组和
  • 从单词创建第二个数组 在
    strpos
    +
    strlen
    之后显示 数组中的第一个字

或者,如果您已经掌握了搜索词前后的一些字符,如果您将这些字符分解成一个数组,您可以提取一个或两个单词。

发布一些代码,以便我们可以看到您试图实现的目标……提示:您应该“转义”查询字符串您应该在搜索词上使用preg_quote,正如内比杰米尼在其他评论中指出的那样。
... our forefathers brought forth upon this continent ...