preg_match не работает должным образом

у меня есть некоторые данные, и я хочу выяснить их значение, поэтому я пытаюсь использовать функцию preg_match, чтобы было легко найти значения, я пытаюсь использовать следующий код для получения значений, но я думаю, что в моем коде есть некоторая проблема, потому что я получаю значение $ a, но я пытаюсь все, чтобы найти значение $ a1 вот пример кода м

$data=Date:29-05-2016 11:36 - Mo:919530489323 - pdd:9339 - lpm:78JIOP-
pas:sami
preg_match('#Date:(.*?) (.*?) - Mo:91(.*?) - pdd:(.*?) -
lpm:(.*?) - pas:(.*?)#',$data,$matches);
$a=$matches[3];
$a1=$matches[6];

теперь, что я делаю, чтобы получить значение $ a1 или какой код для него правильный

0

Решение

Замени свое последнее слово на regex чтобы соответствовать всему слову. В настоящее время он возвращает пустое (если у вас есть print_r соответствует массиву).

использование regex следующим образом:

preg_match('#Date:(.*?) (.*?) - Mo:91(.*?) - pdd:(.*?) - lpm:(.*?) - pas:(.*)#',$data,$matches);
1

Другие решения

Так как ваша последняя скобка использует знак лени с подстановочными знаками он не будет соответствовать ничему, кроме как требуется другим правилам. Других правил, определяющих конец общего матча, нет, поэтому последняя часть sami просто пропущено вашим регулярным выражением. Вы можете проверить это:

<?php

$data="Date:29-05-2016 11:36 - Mo:919530489323 - pdd:9339 - lpm:78JIOP - pas:sami";
preg_match('#Date:(.*?) (.*?) - Mo:91(.*?) - pdd:(.*?) - lpm:(.*?) - pas:(.*?)#',$data,$matches);

var_dump($matches);

Какой вывод это:

array(7) {
[0]=>
string(70) "Date:29-05-2016 11:36 - Mo:919530489323 - pdd:9339 - lpm:78JIOP - pas:"[1]=>
string(10) "29-05-2016"[2]=>
string(5) "11:36"[3]=>
string(10) "9530489323"[4]=>
string(4) "9339"[5]=>
string(6) "78JIOP"[6]=>
string(0) ""}

Обратите внимание на общую строку соответствия ($matches[0]) значение фактически останавливается на последнем :, вот почему у вас есть пустая строка в $matches[6],

Преследование регулярного выражения решит проблему:

<?php

$data="Date:29-05-2016 11:36 - Mo:919530489323 - pdd:9339 - lpm:78JIOP - pas:sami";
preg_match('#^Date:(.*?) (.*?) - Mo:91(.*?) - pdd:(.*?) - lpm:(.*?) - pas:(.*?)$#',$data,$matches);

var_dump($matches);

Обратите внимание на ^ а также $ Я добавил. Они будут соответствовать «началу строки» и «концу строки». Так что строка из последнего : до конца вся входная строка будет включена. Какой вывод это:

array(7) {
[0]=>
string(74) "Date:29-05-2016 11:36 - Mo:919530489323 - pdd:9339 - lpm:78JIOP - pas:sami"[1]=>
string(10) "29-05-2016"[2]=>
string(5) "11:36"[3]=>
string(10) "9530489323"[4]=>
string(4) "9339"[5]=>
string(6) "78JIOP"[6]=>
string(4) "sami"}
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector