Можно конечно как-то наговнокодить, пытаться сгенерировать регулярку, потом ее подставлять, но интересует красивый и быстрый способ
А можно не наговнокодить, а красиво и быстро сгенерировать регулярку из маски.
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'";
}