我有一些数据,我想找出它的价值,所以我尝试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的价值或什么是正确的代码
答案 0 :(得分:1)
替换regex
的最后一个单词以匹配整个单词。目前它返回空白(如果你有print_r
匹配数组)。
使用regex
如下:
preg_match('#Date:(.*?) (.*?) - Mo:91(.*?) - pdd:(.*?) - lpm:(.*?) - pas:(.*)#',$data,$matches);
答案 1 :(得分:1)
由于您的上一个括号使用带有通配符的laziness mark,因此除了其他规则要求之外,它将不会匹配任何内容。没有其他规则来指定整体匹配的结束,因此正则表达式只会跳过最后一部分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"
}