I have a string in a format like this:
5;1-x;1-2;(1-x;)+
I used 1-x as a notation for all integers from 1 to infinity and (1-x;)+ to mark that the last integer may be repeated any number of times.
Some example strings:
5;1;1;1
5;7;2;7;5;1;9
How can I match these strings with regex and get all the (1-x;)+ matches?
I have tried the following:
preg_match_all('%5;([1-9]{1}[0-9]*);([1-2]);([1-9]{1}[0-9]*;?)+%',
$str, $matches);
And the result for string "5;1;1;1" is:
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"
}
}
For the string "5;7;2;7;5;1;9" it is:
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"
}
}
As you can see, only the last integer from (1-x;)+ is in the matches array, but I want the matches array to contain values 7, 5, 1, and 9, not just the last one. Is this even possible using regex or do I need to use another approach to validate and get values from these strings?
explode()won't suffice?