Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 提取字符串中给定搜索字符串周围的X个字数_Php_Mysql_Regex_Search - Fatal编程技术网

Php 提取字符串中给定搜索字符串周围的X个字数

Php 提取字符串中给定搜索字符串周围的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}) 请看这里:

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

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

我正在使用PHP


谢谢

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

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

((?:\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'