Регулярное выражение php, не возвращающее совпадения

У меня действительно простая настройка регулярных выражений.

preg_match('/[0-9]*/', $item, $id);

Значение строки $item равно "

  • <a href="http://dcdc.siretesting.com/programs/child-care/" title="Child Care">Child Care</a>
  • "

    когда я print_r($id) Я получаю пустой массив Array ([0] = > )

    Я тестировал с помощью http://regexpal.com/, и он выбирает, как я ожидал. Он выделяет номер 29

    Я не могу понять, почему в PHP он не подходит правильно.

    3 ответа

    Вероятно, вы ошибаетесь в своем шаблоне:

    /[0-9]*/

    Сигнал * означает, что вы хотите совместить ноль или более символов. preg_match делает это, он находит нуль символьного класса [0-9] успешно и возвращает вам пустую строку.

    Возможно, это означало следующее:

    /[0-9]+/

    Сигналы + указывают, что вы хотите совместить один или несколько.

    Regexpal даст вам все совпадения не только первого. См. preg_match_all: Демо.


    Используйте это с осторожностью...

    if (preg_match('/\d+/', $subject, $regs)) {
     $result = $regs[0];
    }

    Изменить:

    Используйте с осторожностью, потому что \d + будет соответствовать только первой последовательности чисел в любом месте внутри строки темы. Так что да, это не очень безопасно использовать.


    Используйте + вместо *, так как * будет соответствовать нулевым экземплярам. Вам нужно 1 или более через +.

    preg_match('/[0-9]+/', $item, $id);
    print_r($id);
    Array
    (
     [0] => 29
    )

    licensed under cc by-sa 3.0 with attribution.