$re = '/(?\'DrawingNumber\'^P\d{5}-\d{2}-TP\d{2}-\d{3})-?(?\'Hand\'L|R)?-?(?\'Dimensions\'(-?\d{2,})*)-?(?\'Type\'1|2)?$/m';
$str = 'P01867-13-TP09-001-4950-1775-1175-895-1125-835
FAIL01867-13-TP09-001-4950-1775-1175-895-1125-835
P01867-13-TP09-002-4950-1775-1045-895-1035
P01867-13-TP09-002---4950-1775-1045-895-1035
P01867-13-TP02-019-L-1137-275-852-102
P-13-TP02-019-L-1137-275-852-102
P01867-13-TP02-019-L-1137-275-852-102
P01867-13-TP02-019-L-1137-275-852-102-failure
P01867-13-TP02-019-R-1137-275-852-102
P01867-13-TP02-021-L-1137-1055-1372
P01867-13-TP02-021-L-1137-535-1027
P01867-13-TP02-021-L-1137-795-1184
P01867-13-TP02-021-R-1137-1055-1372
P01867-13-TP02-021-R-1137-535-1027
P01867-13-TP02-021-R-1137-795-1184
P01867-13-TP02-025-L-1137-1315-1581
P01867-13-TP02-025-R-1137-1315-1581
P01867-13-TP03-005
P01867-13-TP02-019-L-1137-275
P01867-13-TP02-019-R-1137-275
P01867-13-TP02-019-R-1137
P01867-13-TP02-019-L-1137
P01867-13-TP09-001-4950-1775-1175-895-1125-835-000-001-002-003-004-005-006-007
P01867-13-TP02-019-L-1137-275-852-102
P01867-13-TP02-019-R-1137-275-852-102
P01867-13-TP02-021-L-1137-1055-1372
P01867-13-TP02-021-L-1137-535-1027
P01867-13-TP02-021-L-1137-795-1184
P01867-13-TP02-021-R-1137-1055-1372
P01867-13-TP02-021-R-1137-535-1027
P01867-13-TP02-021-R-1137-795-1184
P01867-13-TP02-025-L-1137-1315-1581
P01867-13-TP02-025-R-1137-1315-1581
P01867-13-TP03-005
P01867-13-TP04-003-180-56
P01867-13-TP05-001-L-953
P01867-13-TP05-001-R-953
P01867-13-TP07-001-1073-1103
P01867-13-TP07-001-707-737
P01867-13-TP07-001-874-904
P01867-13-TP07-002-1289-1329
P01867-13-TP08-002-1302-1296
P01867-13-TP08-003-1317-1307-263
P01867-13-TP09-001-4950-1775-1175-895-1125-835
P01867-13-TP09-002-4950-1775-1045-895-1035
P01867-13-TP09-002-4950-1775-1110-895-1100
P01867-13-TP09-002-4950-1775-915-895-905
P01867-13-TP09-002-4950-1775-980-895-970
P01867-13-TP11-003
P01867-13-TP11-005-200
P01867-13-TP11-009-200
P01867-13-TP11-013
P01867-13-TP14-001-L-251-126
P01867-13-TP14-001-R-251-126
P01867-13-TP14-003-781
P01867-13-TP16-001-L-1772-157
P01867-13-TP16-001-R-1772-157
P01867-13-TP16-002-1397-157
P01867-13-TP17-001-L-728-921
P01867-13-TP17-001-R-728-921
P01867-13-TP17-011-748-91
P01867-13-TP17-016-748-91
P01867-13-TP20-010-L
P01867-13-TP20-010-R
P01867-13-TP20-014-L
P01867-13-TP20-014-R
P01867-13-TP02-047-1
P01867-13-TP02-047-2';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 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