我有一个这样的字符串:
",[[3,"bus.png",null,"Bus",[["https://maps.gstatic.com/mapfiles/transit/iw2/b/bus.png",0,[15,15],null,0]]]],[[null,null,null,null,"0x31da18325b415901:0xeb661015c651c24a",[[5,["48",1,"#ffffff"]]]],[null,null,null,null,"0x31da19f34e04d59b:0x5758ef6990938b",[[5,["61",1,"#ffffff"]]]],[null,null,null,null,"0x31da1a5b8b75c379:0x6a13e189555f9fab",[[5,["95",1,"#ffffff"]]]],[null,null,null,null,"0x31da1a16ea23bf95:0xd7c90f15535c2b9f",[[5,["106",1,"#ffffff"]]]],[null,null,null,null,"0x31da10a7613d616f:0xf1f61ffeac2ea8a4",[[5,["970",1,"#ffffff"]]]],[null,null,null,null,"0x31da1a0bd6262d0b:0xfbd5d2bfd7a1252",[[5,["NR8",1,"#ffffff"]]]]],null,0,"5"]]],["http://www
我需要得到所有的数字:"48,61,95106970,NR8";所以基本上,需要处理这个格式:"48, 61,95,106,970,NR8"
我试过了:
function get_numbers_from($input) {
$matches = preg_match_all('('['"[]a-zA-Z0-9]*?'"','d*?','".*?'"'])', $input);
foreach($matches[1] as $key => $match) {
array_push($numbers, explode(',', $match)[0]);
}
return $numbers;
}
但似乎显示:Invalid argument supplied for foreach()
如何纠正?
查看preg_match_all()
的手册,函数返回布尔值。你使用第三个参数来匹配。
您也可以将正则表达式更改为以下表达式:
'['['d+,'['"('w+)'",'d+,"#['da-fA-F]+"]]]]
不使用explode()
直接从中获取号码,例如
function get_numbers_from($input) {
preg_match_all('/'['['d+,'['"('w+)'",'d+,"#['da-fA-F]+"]]]]/', $input, $matches);
return $matches[1];
}
您可以使用
'~'["([A-Z]*'d+)"~'
查看regex演示和IDEONE演示
$re = '~'["([A-Z]*'d+)"~';
$str = "'",[[3,'"bus.png'",null,'"Bus'",[['"https://maps.gstatic.com/mapfiles/transit/iw2/b/bus.png'",0,[15,15],null,0]]]],[[null,null,null,null,'"0x31da18325b415901:0xeb661015c651c24a'",[[5,['"48'",1,'"#ffffff'"]]]],[null,null,null,null,'"0x31da19f34e04d59b:0x5758ef6990938b'",[[5,['"61'",1,'"#ffffff'"]]]],[null,null,null,null,'"0x31da1a5b8b75c379:0x6a13e189555f9fab'",[[5,['"95'",1,'"#ffffff'"]]]],[null,null,null,null,'"0x31da1a16ea23bf95:0xd7c90f15535c2b9f'",[[5,['"106'",1,'"#ffffff'"]]]],[null,null,null,null,'"0x31da10a7613d616f:0xf1f61ffeac2ea8a4'",[[5,['"970'",1,'"#ffffff'"]]]],[null,null,null,null,'"0x31da1a0bd6262d0b:0xfbd5d2bfd7a1252'",[[5,['"NR8'",1,'"#ffffff'"]]]]],null,0,'"5'"]]],['"http://www'n48, 61,95,106,970,NR8";
preg_match_all($re, $str, $matches);
print_r($matches[1]);
模式匹配:
'[
-一个[
"
-报价([A-Z]*'d+)
-第1组:任何大写ASCII字母,0次或更多次,后跟1位或更多数字"
-报价
所需的值位于$matches[1]
变量内部。它保存使用带括号的子模式(组1)捕获的所有值。