У меня есть строка в таком формате:
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, а не только последний. Возможно ли это с помощью регулярного выражения или мне нужно использовать другой подход для проверки и получения значений из этих строк?