Вы можете либо использовать preg_match_all()
и отбрасывать совпадения, которые вам не интересны, либо вы можете использовать цикл с preg_match()
. Второй вариант будет лучше, если вы беспокоитесь о затратах на сканирование большой строки.
Этот пример ограничивает 2 совпадения, когда на самом деле их всего 3:
<?php
$str = "ab1ab2ab3ab4c";
for ($offset = 0, $n = 0;
$n < 2 && preg_match('/b([0-9])/', $str, $matches, PREG_OFFSET_CAPTURE, $offset);
++$n, $offset = $matches[0][1] + 1) {
var_dump($matches);
}
Действительно петля while
, вероятно, была бы более четкой, чем петля for
при отражении;)