3v4l.org

run code in 300+ PHP versions simultaneously
<?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