Полагаю, вы будете читать из текстового файла, содержащего много этих записей. Что вы можете сделать, это:
preg_match_all("/\[PT#(.*?);[.*]?(.*?)\]/i", $text, $result);
он поместит все совпадения в массив $ result, и вы сможете получить к ним доступ следующим образом:
echo $result[1][0]; //echos first occurrence's serial
$ result - это отсортированный мажорный столбец, а первая запись в совпадении - это строка полного совпадения
echo $result[0][0]; // would print [PT# 123456ABC; Sony]
echo $result[1][0]; // would print 123456ABC
echo $result[2][0]; // would print Sony
Надеюсь, что поможет
EDIT: исправлено регулярное выражение, теперь должно работать (пока не проверено)