Я бы попробовал что-то вроде:
$matches = array();
preg_match("/($mysearch)/i", $search_tag_text, $matches, PREG_OFFSET_CAPTURE);
И тогда в совпадении у вас будет смещение того, где находится найденная строка, тогда вы можете сделать:
$search_tag_text = substr($subject, ($matches[0][1] - 30), 60);
За 30 символов до матча и 30 после. Если я правильно понял, последний элемент в $ mathces [i] [x] - это смещение, в котором найдено совпадение.