php - 提取字符串中给定搜索字符串周围的 X 个单词

标签 php mysql regex search

我正在寻找一种方法来提取搜索中给定单词两侧的 X 个单词。

例如,如果用户输入“inmate”作为搜索词,MySQL 查询发现帖子内容中包含“inmate”,我想返回的不是帖子的全部内容,而只是两边的 x 个字数,让用户了解帖子的要点,然后他们可以决定是否要继续阅读帖子并完整阅读。

我正在使用 PHP。

谢谢!

最佳答案

您可能无法使用正则表达式完全解决此问题。字与字之间有太多其他字符的可能性...

但是你可以试试这个正则表达式:

((?:\S+\s*){0,5}\S*inmate\S*(?:\s*\S+){0,5})

请看这里:rubular

您可能还想排除某些字符,因为它们不算作单词。现在,正则表达式将任何被空格包围的非空格字符序列计为单词。

只匹配真实的单词:

((?:\w+\s*){0,5}<search word>(?:\s*\w+){0,5})

但是这里任何非单词字符(".等)都会中断匹配。

所以你可以继续......

((?:[\w"',.-]+\s*){0,5}["',.-]?<search word>["',.-]?(?:\s*[\w"',.-]+){0,5})

这还会将 5 个单词与“',.-”之一匹配在您的搜索词周围。

在 php 中使用它:

$sourcestring="For example, if a user enters \"inmate\" as a search word and the MySQL";
preg_match_all('/(?:\S+\s*){0,5}\S*inmate\S*(?:\s*\S+){0,5}/s',$sourcestring,$matches);
echo $matches[0][0]; // you might have more matches, they will be in $matches[0][x]

关于php - 提取字符串中给定搜索字符串周围的 X 个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8250987/

相关文章:

php - 将数据保存在 PHP 表单上以供以后使用

php - 如何使用按字段排序以及按 id 排序

php - 在 PHP 中从 MySQL 获取 Radius

regex - 使用来自另一个 EPS 的值更新一个 EPS 中的边界框的脚本

regex - 使用正则表达式匹配单词的多次迭代

php - 将一个表的选定下拉值插入另一表

php - 为什么在 mysql_query ("string"中使用 $query 而不是直接查询字符串)?

mysql - 将 Rails 4 与远程 MySQL 数据库连接

php - 如何在 PHP 中导出动态表

regex - 在 linux 中搜索文件