Preg_match помощь для нахождения счета - PullRequest
2 голосов
/ 27 июня 2010

Привет всем у меня есть строка

<font size="+1"><b>Open Directory Sites</b></font> (1-20 of 10000)<p>

мне нужно получить 10000 в качестве ответа .. как я использую preg_match ??? Примечание: важно, чтобы множественное вхождение совпадения

Заранее спасибо

1 Ответ

3 голосов
/ 27 июня 2010

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

)

Опять же, чтовы ищете в $matches[1], только на этот раз это будет массив, содержащий 1 или более фактических значений.

...