在字符串中提取围绕给定搜索字符串的 X 个单词
Posted
技术标签:
【中文标题】在字符串中提取围绕给定搜索字符串的 X 个单词【英文标题】:Extract X number of words surrounding a given search string within a string 【发布时间】:2012-01-05 06:20:42 【问题描述】:我正在寻找一种方法来提取搜索中给定单词两侧的 X 个单词。
例如,如果用户输入“inmate”作为搜索词,并且 mysql 查询在帖子内容中找到包含“inmate”的帖子,我想返回的不是帖子的全部内容,而只是x 两边的字数,让用户了解帖子的要点,然后他们可以决定是否要继续阅读帖子并完整阅读。
我正在使用 php。
谢谢!
【问题讨论】:
这也可能对您有所帮助:***.com/q/1436582/1066234 【参考方案1】:您可能无法使用正则表达式完全解决此问题。单词之间有太多其他字符的可能性...
但是你可以试试这个正则表达式:
((?:\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]
【讨论】:
要添加到 morja 的答案,您可以使用 PHP 的 preg_match 从 MySQL 中选择字符串:php.net/manual/en/function.preg-match.php。 谢谢,我会在今天晚些时候有机会的时候尝试一下。感谢您花时间回答这个问题! 我已经尝试过了,它有时可以在 Rubular 上运行...嗯...我尝试在 PHP 中实现它,但我似乎无法理解它...任何人都可以为我指明正确的方向?【参考方案2】:我会将此正则表达式用于 php,它也考虑 UTF8 字符
'~(?:[\pL\pN\']+[^\pL\pN\']+)0,5<search word>(?:[^\pL\pN\']+[\pL\pN\']+)0,5~u'
在这种情况下,'~' 是分隔符,修饰符 'u' 在末尾标识正则表达式是 UTF8 解释的。
请在此处查看有关 Unicode 正则表达式标识符的文档:
http://www.regular-expressions.info/refunicode.html
【讨论】:
以上是关于在字符串中提取围绕给定搜索字符串的 X 个单词的主要内容,如果未能解决你的问题,请参考以下文章
2021-10-02:单词搜索。给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母
如何提取 MySQL 字符串中的第 n 个单词并计算单词出现次数?