Строка сокращается, если диапазон больше {1,40}. Но если меньше, пропадает.
preg_match('/<title[^>]*?>(.{1,40})(.*?)<\/title>/uis', $card, $title);
echo $title[1];
$title = substr($card, 0, 40);
Сборка персонального компьютера от Artline: умный выбор для современных пользователей