2010-06-27 2 views

ответ

3

По крайней мере, для этого конкретного случая, вы могли бы использовать '/\(\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 или более фактических значений.

+0

Что он делает '(\ d +)' без брекетов? – Sarfraz

+0

.it работают нормально, если строка содержит только одну (1-20 из 10000) ... но в моем случае есть вероятность многократного появления –

+0

Не могли бы вы изменить свой вопрос, чтобы отразить реальную ситуацию? –