$str = "r4-10s5r6-7s8";
preg_match_all("#r(\d{1,2})-(\d{1,2})s(\d{1,2})#", $str, $matches);
// group the matches together
$sets = array();
for ($i = 0, $count = count($matches[0]); $i < $count; $i++)
$sets[] = array($matches[1][$i], $matches[2][$i], $matches[3][$i]);
print_r($sets);
出力:
array (size=2)
0 =>
array (size=3)
0 => string '4' (length=1)
1 => string '10' (length=2)
2 => string '5' (length=1)
1 =>
array (size=3)
0 => string '6' (length=1)
1 => string '7' (length=1)
2 => string '8' (length=1)
ループを持たない別のオプションは次のとおりです。
preg_match_all("#r(\d{1,2})-(\d{1,2})s(\d{1,2})#", $str, $matches, PREG_SET_ORDER);
print_r($matches);
出力:
array (size=2)
0 =>
array (size=4)
0 => string 'r4-10s5' (length=7)
1 => string '4' (length=1)
2 => string '10' (length=2)
3 => string '5' (length=1)
1 =>
array (size=4)
0 => string 'r6-7s8' (length=6)
1 => string '6' (length=1)
2 => string '7' (length=1)
3 => string '8' (length=1)