我正在寻找一种方法来提取搜索中给定单词两侧的 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/