$str="user=1234|pass=224466|key=321341"我要提取出3个参数的值我尝试preg_match('/user=(\d+)|/i',$str,$matchs1);$user=$matchs1[1];这样能提取出1234这个但preg_match('/pass=(\d...
$str="user=1234|pass=224466|key=321341"
我要提取出3个参数的值
我尝试
preg_match('/user=(\d+)|/i',$str,$matchs1);
$user=$matchs1[1];
这样能提取出1234 这个
但
preg_match('/pass=(\d+)|/i',$str,$matchs2);
$pass=$matchs2[1];
却提取不出后面的数字224466 ?
这正则要如何写啊……不太懂
可以了。加个转义是可以了。
那为什么第一个 user 可以不用加转义即可实现呢?
$str="user=1234|pass=224466|key=321341";
preg_match('/user=(\d+)|/i',$str,$matchs1);
$user=$matchs1[1];
preg_match 这个函数是搜索subject与pattern给定的正则表达式的一个匹配,可选路径(|):竖线字符用于分离模式中的可选路径。
比如模式gilbert|Sullivan匹配 ”gilbert” 或者 ”sullivan”。
竖线可以在模式中出现任意多个,并且允许有空的可选路径(匹配空字符串)【注意这里】。
匹配的处理从左到右尝试每一个可选路径,并且使用第一个成功匹配的。
‘/pass=(\d+)\|/i’因为会匹配空串,所以会匹配一系列空字符串,而preg_match只返回第一个,所以也就是空,而'/user=(\d+)\|/i'的第一个返回不是空串,所以返回正常。看下面代码,你自己验证一下结果:
$str="user=1234|pass=224466|key=321341";
preg_match_all('/user=(\d+)|/i',$str,$matchs1);
//$user=$matchs1[1];
preg_match_all('/pass=(\d+)|/i',$str,$matchs2);
//$pass=$matchs2[1];
//echo $user . "\n";
//echo $pass . "\n";
print_r($matchs1);
print_r($matchs2);