我有一个格式如下的字符串:
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,而不仅仅是最后一个。这甚至可以使用正则表达式还是我需要使用另一种方法来验证并从这些字符串中获取值?