2017-01-17 9 views
1

У меня есть некоторые данные, которые я хочу, чтобы получить значения из:Исправьте Мою preg_match функции

Mobile:7899886788 bal:0.0 p=1898668 

Я сделал preg_match функцию для этого:

preg_match('#Mobile:(.*?) bal:0.0 p=(.*?)#',$html,$matches); 
$a=matches[1]; 
$a1=$matches[2]; 

Я получаю значение $a но значение для $a1 не найден. Пожалуйста, скажите мне, в чем проблема с моим решением.

ответ

0

Вторая группа в вашем регулярном выражении всегда будет соответствовать пустой строке из-за того, что квантор *? ленив.

Если вы всегда значные значения после Mobile: и p=, вы можете заменить все точечные ленивые узоры совпадающие с простым рисунком цифр соответствия \d+:

'#Mobile:(\d+)\s+bal:0\.0\s+p=(\d+)#' 

См regex demo.

Обратите внимание, что точка должна быть экранирована в соответствии с буквальной точкой. Кроме того, рекомендуется заменить буквальные пробелы на шаблон \s+, который соответствует любому 1 или более символам пробела.

Другой подход заключается в захвате любых 1+ непробельных символов после атрибутов, которые необходимо с \S+:

'#Mobile:(\S+)\s+bal:\S+\s+p=(\S+)#' 

См this regex demo

 Смежные вопросы

  • Нет связанных вопросов^_^