По ходу реализации пришла в голову еще одна идея. Создать поле в базе nextTimeSend. Заносим в базу крон правило, потом подключаем вот эту библиотеку по работе с кроном github.com/mtdowling/cron-expression и вычисляем ближайшую дату, совпадающую с правилом крона:
$cron = Cron\CronExpression::factory($cronRule);
$nextTimeSend = strtotime($cron->getNextRunDate()->format('Y-m-d H:i'));
$cronRule — наше правило крона.
Записываем эту дату в базу.
Теперь выборку легче делать без регулярки.