2015-02-12 5 views
0

У меня есть мульти строка строки, как:PHP preg_match извлечь определенное число из строки

$msg = "Fix #1: This is a message 
Fix #2 
Fix #5"; 

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

То, что я хочу, чтобы preg_match делать, это вернуть массив с 1, 2 и 5. Шаблон должен проверять все Fix #NUM и возвращать все NUM в массиве.

+2

* Я пробовал много шаблонов * Просто покажите нам несколько попыток. – Rizier123

+0

Возможно, вы довольно близки к некоторым вашим попыткам. Покажите нам, что вы пробовали, и мы можем идти оттуда. –

ответ

1

Вы можете использовать preg_match_all() и просто сопоставлять цифры, чтобы вернуть желаемые результаты.

preg_match_all('/\d+/', $msg, $matches); 
var_dump($matches[0]); 

Если матчи должны предшествовать Fix #, вы можете использовать следующее:

preg_match_all('/Fix\s+#\K\d+/', $msg, $matches); 

Это соответствует «Фикс» с последующим пробельных символов «один или несколько» раз, после чего #.

Контрольная последовательность \K сбрасывает начальную точку сообщенного соответствия, и все ранее использованные символы больше не включаются.

+0

'var_dump ($ matches [1])' :) – mudasobwa

+0

Это работает очень хорошо, можете ли вы объяснить второй шаблон? Особенно \ K –

0

Вы должны использовать preg_match_all с этим \d+ regex, потому что preg_match вернет только одно совпадение. Это не будет глобальное совпадение.

1

Если Fix # должен быть-перед номером, то что-то вроде этого следует сделать это:

/(?<=Fix\s+#)\d+/ 

В противном случае это хорошо:

/\d+/ 
Смежные вопросы