Я предполагаю, что, возможно,
(?i)#[a-z][a-z0-9]*(?=\s|$)
просто сработает ОК.
Тест
$re = '/(?i)#[a-z][a-z0-9]*(?=\s|$)/m';
$str = '#inktober #inktober2019 #i #i1 #1 #2019
# inktober #@inktober2019 #@i #i1@ #1 #2019';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
var_dump($matches);
Если вы хотите упростить / изменить/ изучить выражение, это было объяснено на верхней правой панели regex101.com . Если хотите, вы также можете посмотреть в этой ссылке , как она будет сопоставляться с некоторыми примерами входных данных.
RegEx Circuit
jex.im визуализирует регулярные выражения: