Php preg_match工作不正常
我有一些数据,我想找出它的值,所以我尝试preg_match函数,可以很容易找到值,我尝试下面的代码来获得值,但我认为我的代码中有一些问题,因为我得到的值是$a,但我尽一切努力找到$a1的值这里是m示例代码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:(.*
$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"
}