Возможно, вы не сможете полностью решить эту проблему с помощью регулярных выражений.Между словами слишком много возможностей других символов ...
Но вы можете попробовать это регулярное выражение:
((?:\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]