Регулярное выражение PHP. Как получить массив совпадений?

У меня есть строка в таком формате:

5;1-x;1-2;(1-x;)+ 

Я использовал 1-x как обозначение для всех целых чисел от 1 до бесконечности и (1-x;) +, чтобы отметить, что последнее целое число может повторяться сколько угодно раз.

Некоторые примеры строк:

 5;1;1;1 5;7;2;7;5;1;9 

Как я могу сопоставить эти строки с регулярным выражением и получить все совпадения (1-x;) +?

Я пробовал следующее:

 preg_match_all('%5;([1-9]{1}[0-9]*);([1-2]);([1-9]{1}[0-9]*;?)+%', $str, $matches); 

И результат для строки «5; 1; 1; 1»:

 array(4) { [0]=> array(1) { [0]=> string(7) "5;1;1;1" } [1]=> array(1) { [0]=> string(1) "1" } [2]=> array(1) { [0]=> string(1) "1" } [3]=> array(1) { [0]=> string(1) "1" } } 

Для строки «5; 7; 2; 7; 5; 1; 9» это:

 array(4) { [0]=> array(1) { [0]=> string(13) "5;7;2;7;5;1;9" } [1]=> array(1) { [0]=> string(1) "7" } [2]=> array(1) { [0]=> string(1) "2" } [3]=> array(1) { [0]=> string(1) "9" } } 

Как вы можете видеть, только последнее целое число из (1-x;) + находится в массиве совпадений, но я хочу, чтобы массив совпадений содержал значения 7, 5, 1 и 9, а не только последний. Возможно ли это с помощью регулярного выражения или мне нужно использовать другой подход для проверки и получения значений из этих строк?

Solutions Collecting From Web of "Регулярное выражение PHP. Как получить массив совпадений?"