Как проверить строку по маске?
Можно конечно как-то наговнокодить, пытаться сгенерировать регулярку, потом ее подставлять, но интересует красивый и быстрый способ
А можно не наговнокодить, а красиво и быстро сгенерировать регулярку из маски. 
ideone.com/YY4Yhh$mask = 'X-XX-XX-XXXXX';
$test = '7-Ds-re-SD434';

$pattern = preg_replace_callback('/X+/', function ($m) { 
    return '[^-]{' . strlen($m[0]) . '}'; 
}, preg_quote($mask));

if (preg_match("/^{$pattern}$/", $test)) {
	echo "Строка '$test' подходит под маску '$mask'"; 
}
Но есть вариант и проще:
ideone.com/GiwMAY$mask = 'X-XX-XX-XXXXX';
$test = '7-Ds-re-SD434';

if (preg_replace('/[^-]/', 'X', $test) == $mask) {
    echo "Строка '$test' подходит под маску '$mask'"; 
}
Можно вообще обойтись без регулярок. У вас есть чёткий разделитель - тире. Сделайте split по "-" для маски и собственно строки. Дальше достаточно сравнить длины массивов и поэлементно длины получившихся строк.