$re = '/(
[A-Z][A-Z]\d\d[A-Z]\[
(\*
|
(
(
(\d|\d\d)-(\d|\d\d)
)
|
(\d|\d\d)
)
)
\]
(,|$)
)+/x';
$str = 'RA01D[1-1],RA01D[17-17],RA01D[2-2],RA01D[18-18]';
preg_match($re, $str, $matches, PREG_OFFSET_CAPTURE, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php