По крайней мере, для этого конкретного случая, вы могли бы использовать '/\(\d+\-\d+ of (\d+)\)/'
как pattern
.
Он соответствует строкам ({one-or-more-digits}-{one-or-more-digits} of {one-or-more-digits})
и захватывает последние {one-or-more-digits}
в группу ({}
s добавлен только для наглядности здесь ..).
$str = '<font size="+1"><b>Open Directory Sites</b></font> (1-20 of 10000)<p>';
$matches = array();
if (preg_match('/\(\d+\-\d+ of (\d+)\)/', $str, $matches))
{
print_r($matches);
}
печатает:
Array
(
[0] => (1-20 of 10000)
[1] => 10000
)
Таким образом, 10000 Вы ищете были бы доступны в $matches[1]
.
Редактировать после вашего комментария: Если у вас есть несколько вхождений ({one-or-more-digits}-{one-or-more-digits} of {one-or-more-digits})
, вы можете использовать preg_match_all
, чтобы поймать их всех. Я не уверен, насколько полезны номера сами без контекста, в котором они имели место, но здесь, как вы могли бы сделать это:
$str = '<font size="+1"><b>Open Directory Sites</b></font> (1-20 of 10000)<p>';
$str .= "\n$str\n";
echo $str;
$matches = array();
preg_match_all('/\(\d+\-\d+ of (\d+)\)/', $str, $matches);
print_r($matches);
печатает:
<font size="+1"><b>Open Directory Sites</b></font> (1-20 of 10000)<p>
<font size="+1"><b>Open Directory Sites</b></font> (1-20 of 10000)<p>
Array
(
[0] => Array
(
[0] => (1-20 of 10000)
[1] => (1-20 of 10000)
)
[1] => Array
(
[0] => 10000
[1] => 10000
)
)
Опять же, что вы ищете for будет в $matches[1]
, только на этот раз это будет массив, содержащий 1 или более фактических значений.
Что он делает '(\ d +)' без брекетов? – Sarfraz
.it работают нормально, если строка содержит только одну (1-20 из 10000) ... но в моем случае есть вероятность многократного появления –
Не могли бы вы изменить свой вопрос, чтобы отразить реальную ситуацию? –