Проблема даже хуже, чем вы думали. Ваш вывод из REGEXP на самом деле является массивом ячеек массивов ячеек массивов ячеек строк! Да, три уровня! Следующее использует CELLFUN , чтобы избавиться от двух верхних уровней, оставляя только массив ячеек строк:
cellArrayOfStrings = cellfun(@(c) c{1},res);
Однако вы также можете изменить свой вызов на REGEXP , чтобы избавиться от одного уровня, а затем использовать VERTCAT :
res = regexp(S,'(\d)','tokens','once'); %# Added the 'once' option
cellArrayOfStrings = vertcat(res{:});