次のような形式の文字列があります。
5;1-x;1-2;(1-x;)+
1 から無限大までのすべての整数の表記として 1-x を使用し、最後の整数を何度でも繰り返すことができることを示すために (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;)+ の最後の整数のみが match 配列に含まれていますが、matches 配列には最後の値だけでなく、値 7、5、1、および 9 を含めたいと考えています。これは正規表現を使用しても可能ですか、またはこれらの文字列から値を検証して取得するために別のアプローチを使用する必要がありますか?