Можно решить "в лоб", правда это будет не очень универсально..
$preg = '/USER\-[0-9]+\-[A-Z]{1}/';
$result = \str_replace(['\\', '/'], '', $preg);
\preg_match_all('/\[([\w\d-]+)\][{]*([\+\*\d,]+)[}]*/', $preg, $match);
$maxCount = 10;
if (!empty($match[0])) {
foreach ($match[1] as $key => $part) {
$part = \explode('-', $part);
$range = \range($part[0], $part[1]);
$countData = $match[2][$key];
if ($countData == '+') {
$count = \mt_rand(1, $maxCount);
} elseif ($countData == '*') {
$count = \mt_rand(0, $maxCount);
} else {
$countData = \explode(',', $countData);
if (isset($countData[1])) {
$count = \mt_rand($countData[0], $countData[1]);
} else {
$count = $countData[0];
}
}
$n = 0;
$generated = '';
$rangeTotal = \sizeof($range);
for ($n; $n < $count; ++$n) {
$randKey = \mt_rand (0, $rangeTotal - 1);
$generated .= $range[$randKey];
}
$replace = $match[0][$key];
$result = \str_replace($replace, $generated, $result);
}
}
echo $result;