<?php
$re = '/(?<!\S)(?:(?!keyword\b)\w+\h+){1,3}keyword\b(?=((?:\h+(?!keyword\b)\w+){1,3}))/u';
$strings = [
"word1 word2 word3 keyword word4 word5 word6 keyword word7 word8 word9 word10",
"word2 keyword word4 word5 word6 keyword word7 word8",
"word2 word3 keyword word4 word5 word6 keyword word7 keyword word10",
];
foreach ($strings as $str) {
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
$matches = array_map(function($m) {
return $m[0] . $m[1];
}, $matches);
print_r($matches);
}
preferences:
125.62 ms | 406 KiB | 5 Q