Php preg_match工作不正常

Php preg_match工作不正常,php,regex,preg-match,Php,Regex,Preg Match,我有一些数据,我想找出它的值,所以我尝试preg_match函数,可以很容易找到值,我尝试下面的代码来获得值,但我认为我的代码中有一些问题,因为我得到的值是$a,但我尽一切努力找到$a1的值这里是m示例代码 $data=Date:29-05-2016 11:36 - Mo:919530489323 - pdd:9339 - lpm:78JIOP- pas:sami preg_match('#Date:(.*?) (.*?) - Mo:91(.*?) - pdd:(.*?) - lpm:(.*

我有一些数据,我想找出它的值,所以我尝试preg_match函数,可以很容易找到值,我尝试下面的代码来获得值,但我认为我的代码中有一些问题,因为我得到的值是$a,但我尽一切努力找到$a1的值这里是m示例代码

$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的值,或者用正确的代码替换
regex的最后一个单词,以匹配整个单词。当前它返回空白(如果您有
print\r
匹配数组)

使用
regex
如下:

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

由于您的最后一个括号与通配符一起使用,因此它将不匹配任何内容,除非其他规则要求它匹配。没有其他规则指定整个匹配的结束,因此正则表达式只跳过最后一部分
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);
请注意,整个匹配字符串(
$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);

这意味着没有匹配项<代码>打印\r
并请提供可复制的代码。在
pdd
lpm
之间,字符串中没有新行。。此外,我还要编写一个比
*?
<?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"
}