Php 提取字符串中给定搜索字符串周围的X个字数
我正在寻找一种方法,在搜索中提取给定单词两侧X个单词 例如,如果用户输入“inmate”作为搜索词,MySQL查询发现帖子内容中包含“inmate”,我想返回的不是文章的全部内容,而是文章两边的x个单词,让用户了解文章的要点,然后他们可以决定是否继续阅读文章并完整阅读 我正在使用PHPPhp 提取字符串中给定搜索字符串周围的X个字数,php,mysql,regex,search,Php,Mysql,Regex,Search,我正在寻找一种方法,在搜索中提取给定单词两侧X个单词 例如,如果用户输入“inmate”作为搜索词,MySQL查询发现帖子内容中包含“inmate”,我想返回的不是文章的全部内容,而是文章两边的x个单词,让用户了解文章的要点,然后他们可以决定是否继续阅读文章并完整阅读 我正在使用PHP 谢谢 使用正则表达式可能无法完全解决此问题。单词之间有太多其他字符的可能性 但是你可以试试这个正则表达式: ((?:\S+\s*){0,5}\S*inmate\S*(?:\s*\S+){0,5}) 请看这里:
谢谢 使用正则表达式可能无法完全解决此问题。单词之间有太多其他字符的可能性 但是你可以试试这个正则表达式:
((?:\S+\s*){0,5}\S*inmate\S*(?:\s*\S+){0,5})
请看这里:
您可能还希望排除某些字符,因为它们不算作单词。现在,正则表达式将被空格包围的任何非空格字符序列计数为单词
要仅匹配真实单词,请执行以下操作:
((?:\w+\s*){0,5}<search word>(?:\s*\w+){0,5})
我将使用这个用于php的正则表达式,它还考虑了UTF8字符
'~(?:[\p{L}\p{N}\']+[^\p{L}\p{N}\']+){0,5}<search word>(?:[^\p{L}\p{N}\']+[\p{L}\p{N}\']+){0,5}~u'
'(?:[\p{L}\p{N}\']+[^\p{L}\p{N}\']+{0,5}(?:[^\p{L}\p{N}\']+[\p{L}\p{N}\']+{0,5}~u'
在本例中,“~”是分隔符,末尾的修饰符“u”表示正则表达式是UTF8解释的
请参阅以下有关Unicode正则表达式标识符的文档:
要添加到morja的答案中,您可以使用PHP的preg_match从MySQL中选择字符串:。谢谢,今天晚些时候有机会我会尝试这些字符串。我感谢你花时间回答这个问题!我试过了,它有时对红疹有效。。。六羟甲基三聚氰胺六甲醚。。。我曾尝试用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]
'~(?:[\p{L}\p{N}\']+[^\p{L}\p{N}\']+){0,5}<search word>(?:[^\p{L}\p{N}\']+[\p{L}\p{N}\']+){0,5}~u'