如何使用php制作正则表达式,从下面的代码中提取复杂数组

如何使用php制作正则表达式,从下面的代码中提取复杂数组,php,javascript,regex,Php,Javascript,Regex,我想从此网站检索一些数据: 在上述网页的html源代码中有以下几行代码: <script> function GetMap(){ var results = new Array(); results[results.length] = {"lat" : "36.299484", "lon" : "-94.173495", "id" : "2498", "name" : "test", "phoneNumber" : "(479) 986-1100", "ho

我想从此网站检索一些数据:

在上述网页的html源代码中有以下几行代码:

<script>
    function GetMap(){
    var results = new Array();
    results[results.length] = {"lat" : "36.299484", "lon" : "-94.173495", "id" : "2498", "name" : "test", "phoneNumber" : "(479) 986-1100", "hours" : "test", "address" : {"city" : "Rogers", "state" : "AR", "zip" : "72758", "street" : "2404 Promenade Blvd" }, "concepts" : [{"name" : "Pharmacy", "phoneNumber" : "(479) 986-1101", "hours" : "<b>M-Fr:</b> 10:00AM-7:00PM<br><b>Sa:</b> 10:00AM-7:00PM" }, {"name" : "PhotoLab", "hours" : "<b>M-Fr:</b> 9:00AM-9:00PM<br><b>Sa:</b> 9:00AM-9:00PM<br><b>Su:</b> 10:00AM-8:00PM" }, {"name" : "Wine"}, {"name" : "Starbucks"}]};
    results[results.length] = {"lat" : "36.1157", "lon" : "-94.1555", "id" : "1470", "name" : "test", "phoneNumber" : "(479) 443-5517", "hours" : "test", "address" : {"city" : "Fayetteville", "state" : "AR", "zip" : "72703", "street" : "3545 N Shiloh Dr" }, "concepts" : [{"name" : "Pharmacy", "phoneNumber" : "(479) 443-5628", "hours" : "<b>M-Fr:</b> 9:00AM-7:00PM<br><b>Sa:</b> 9:00AM-5:00PM<br><b>Su:</b> 11:00AM-5:00PM" }]};
    results[results.length] = {"lat" : "36.6738", "lon" : "-93.2257", "id" : "2098", "name" : "test", "phoneNumber" : "(417) 243-4500", "hours" : "test", "address" : {"city" : "Branson", "state" : "MO", "zip" : "65616", "street" : "1200 Branson Hills Pkwy" }, "concepts" : [{"name" : "Pharmacy", "phoneNumber" : "(417) 243-4513", "hours" : "<b>M-Fr:</b> 9:00AM-9:00PM<br><b>Sa:</b> 9:00AM-6:00PM<br><b>Su:</b> 9:00AM-6:00PM" }, {"name" : "PhotoLab", "phoneNumber" : "(417) 243-4500", "hours" : "<b>M-Fr:</b> 12:00PM-6:00PM<br><b>Sa:</b> 12:00PM-6:00PM<br><b>Su:</b> 12:00PM-6:00PM" }, {"name" : "Wine"}, {"name" : "Starbucks"}]};
    results[results.length] = {"lat" : "37.0849", "lon" : "-94.474", "id" : "774", "name" : "test", "phoneNumber" : "(417) 659-8755", "hours" : "test", "address" : {"city" : "Joplin", "state" : "MO", "zip" : "64801", "street" : "3151 E 7th St" }, "concepts" : [{"name" : "FreshGrocery"}, {"name" : "Pharmacy", "phoneNumber" : "(417) 206-3377", "hours" : "<b>M-Fr:</b> 9:00AM-9:00PM<br><b>Sa:</b> 9:00AM-6:00PM<br><b>Su:</b> 9:00AM-6:00PM" }, {"name" : "Wine"}, {"name" : "Starbucks"}]};
    results[results.length] = {"lat" : "37.1511", "lon" : "-93.2623", "id" : "1031", "name" : "test", "phoneNumber" : "(417) 889-1511", "hours" : "test", "address" : {"city" : "Springfield", "state" : "MO", "zip" : "65804", "street" : "1825 E Primrose St" }, "concepts" : [{"name" : "FreshGrocery"}, {"name" : "Pharmacy", "phoneNumber" : "(417) 520-1745", "hours" : "<b>M-Fr:</b> 9:00AM-7:00PM<br><b>Sa:</b> 9:00AM-5:00PM<br><b>Su:</b> 11:00AM-5:00PM" }, {"name" : "PhotoLab", "phoneNumber" : "(417) 889-1511", "hours" : "<b>M-Fr:</b> 12:00PM-6:00PM<br><b>Sa:</b> 12:00PM-6:00PM<br><b>Su:</b> 12:00PM-6:00PM" }, {"name" : "Starbucks"}]};
)

这是我不完整的方法

   $fp = fopen("file.csv","w");
    $contents = file_get_contents('http://sites.target.com/site/en/spot/search_results.jsp?&mapType=enhanced&startAddress=72756&startingLat=36.322757720947266&startingLong=-93.99922943115234&_requestid=2573952');
    preg_match_all('Regular Expression Here', $contents, $matches);        
    foreach ($matches[1] as $index) {       
        preg_match('Regular Expression Here', $contents, $matches);
        preg_match_all('Regular Expression Here', $matches [1], $matches);
        $c = count ($matches [1]);
        $results = array();
        for ($i=0; $i<$c; $i++)  {
            $results [$matches [1] [$i]] = trim($matches [2] [$i], "\'");
        }
        fwrite($fp,implode(";",array_values($results))."\r\n");
    }
    fclose($fp);
$fp=fopen(“file.csv”,“w”);
$contents=file\u get\u contents('http://sites.target.com/site/en/spot/search_results.jsp?&mapType=enhanced&startAddress=72756&startingLat=36.322757720947266&startingLong=-93.99922943115234&_requestid=2573952’;
preg_match_all('Regular Expression Here',$contents,$matches);
foreach($matches[1]作为$index){
preg_match('Regular Expression Here',$contents,$matches);
preg_match_all('Regular Expression Here',$matches[1],$matches);
$c=计数($matches[1]);
$results=array();

对于($i=0;$i而言,信息的格式为JSON。PHP有一个JSON解析器


如果格式像您的示例中那样是固定的,我就不必为正则表达式操心了

我要做的是:

  • 使用
    file
    而不是
    file\u get\u contents
    获取数组中的内容(每个数组元素一行文件)
  • 在阵列中循环
  • 使用许多字符串函数中的一些来检查
    结果[results.length]=
    并删除之前的所有内容,包括
    结果[results.length]=
    本身
  • 使用
    trim
    去除结尾、开头和结尾的空格
  • 使用
    json\u decode
    解码剩余的json对象,请参阅

  • 到目前为止你有什么?我已经更新了我的问题,我在制作如此复杂的正则表达式方面遇到了问题。你也可以向我推荐一些好的学习材料,让我掌握这类复杂代码的正则表达式的专业知识。我对正则表达式有非常基本的了解,希望获得专业知识,以便我可以制作任何类型的正则表达式。谢谢,但我的问题与从该网页的html源中删除数据有关,我需要帮助生成正则表达式以从html中删除该信息。因此,从“var results=new Array();”到“};”之间删除所有内容,您就得到了一个json对象。通过json_decode()运行它正如@OmnipotentEntity所说的,你是home free.nageb,不是真的。你仍然有创建数组的JS代码要处理。这不是JSON解析器可以处理的。谢谢,先生,这对我很有帮助。实际上数组的格式将保持不变,但数组的数量将取决于此url中的输入变量“”使用post参数。如果您能在regex..@WQS中帮助我,我将不胜感激,但您需要在数组中循环(步骤2),您将获得所有数组,以便您可以存储步骤5中处理的结果。在新数组中。您需要一个正则表达式专门用于什么?好的,先生,我将按照您的步骤进行操作,实际上我为其他网站尝试了正则表达式,它运行良好(问题底部给出了代码),GetMap()中的代码行在网页的html源代码中提供。这就是为什么我问应该使用什么正则表达式来废弃GetMap()函数中的那些数组。
       $fp = fopen("file.csv","w");
        $contents = file_get_contents('http://sites.target.com/site/en/spot/search_results.jsp?&mapType=enhanced&startAddress=72756&startingLat=36.322757720947266&startingLong=-93.99922943115234&_requestid=2573952');
        preg_match_all('Regular Expression Here', $contents, $matches);        
        foreach ($matches[1] as $index) {       
            preg_match('Regular Expression Here', $contents, $matches);
            preg_match_all('Regular Expression Here', $matches [1], $matches);
            $c = count ($matches [1]);
            $results = array();
            for ($i=0; $i<$c; $i++)  {
                $results [$matches [1] [$i]] = trim($matches [2] [$i], "\'");
            }
            fwrite($fp,implode(";",array_values($results))."\r\n");
        }
        fclose($fp);