如何使用正则表达式从以下格式中获取数字:[[5,[“95”,1,“#ffffff”]]]


How do I get number from this format:,[[5,["95",1,"#ffffff"]]]], using regex

我有一个这样的字符串:

",[[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)捕获的所有值。