PHP регулярное выражение не возвращает совпадений - PullRequest
3 голосов
/ 17 ноября 2011

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

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

Строковое значение элемента $ равно "<li class="page_item page-item-29 current_page_item"><a href="http://dcdc.siretesting.com/programs/child-care/" title="Child Care">Child Care</a></li>"

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

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

Я не могу понять, почему в PHP он не соответствует должным образом.

Ответы [ 3 ]

2 голосов
/ 17 ноября 2011

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

/[0-9]*/

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

Вы могли бы иметь в виду это:

/[0-9]+/

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

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

1 голос
/ 17 ноября 2011

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

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

Редактировать:

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

0 голосов
/ 17 ноября 2011

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

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

print_r($id);
Array
(
    [0] => 29
)
...