2013-04-04 3 views
0

Я пытаюсь получить «реф код» из HTML, но только «реф», когда метка PPHP preg_match Как

Ex: 031-0132-806-02

Как может Я делаю это с помощью preg_match ???

Как получить эту информацию с помощью preg_match?

{ 
label: 'P', 
available: false, 
ref: '031-0132-806-02' 
}, 
{ 
label: 'M', 
available: false, 
ref: '031-0132-806-03' 
}] 
} 
}, 
+3

Почему не декодирует данные с 'json_decode()', а затем обработать объект/массив, чтобы получить информацию, которую Вы хотите? – Sammitch

+0

Является ли этот код объектом или вы хотите регулярное выражение именно на этом коде? – 2013-04-04 17:50:56

+0

Да ... есть json внутри html. Это начинается с productPage1.init ({и заканчивается с //]]> \t. Есть ли способ использовать preg_math? – adrianogf

ответ

0

Использование цикла Еогеасп:

$string = <<<WUT 
{ 
label: 'P', 
available: false, 
ref: '031-0132-806-02' 
}, 
{ 
label: 'M', 
available: false, 
ref: '031-0132-806-03' 
}] 
} 
}, 
WUT; 

$ref = array(); 

preg_match_all('/(?P<labels>{\s*label:.*?})/s', $string, $m); 

foreach($m['labels'] as $code){ 
    if(strpos($code, "label: 'P'")){ 
     preg_match('/ref: \'(.*?)\'/', $code, $n); 
     $ref[] = $n[1]; 
    } 
} 

print_r($ref); 
2

Если номера всегда находятся в той же схеме, вы можете сделать это с этим:

<?php 
    $string = "{ 
    label: 'P', 
    available: false, 
    ref: '031-0132-806-02' 
    }, 
    { 
    label: 'M', 
    available: false, 
    ref: '031-0132-806-03' 
    }] 
    } 
    },"; 

    preg_match_all('![0-9]{3}\-[0-9]{4}\-[0-9]{3}\-[0-9]{2}!',$string,$matches); 

    print_r($matches); 

?> 

Обновленный Скажем, это гусеничный для данных.

<?php 

$url = 'http://www.urltocapture...'; 

function crawlSite($url){ 
    $refIDs = array(); 
     $string = file_get_contents($url); 

     preg_match_all('!\items: +?\[[^]]+\]!s',$string,$sets); 
     foreach($sets as $items){ 
      foreach($items as $item){ 

       $cleanupPattern = array('!\t+!','! +!','!(\r\n|\n|\r)+!','! +!'); 
       $cleanupReplacements = array(' ',' ',""," ",); 
       $item = preg_replace($cleanupPattern,$cleanupReplacements,$item); 
       //echo $item."\n";  

      preg_match_all('!label: \'P\'[^\}]+([0-9]{3}\-[0-9]{4}\-[0-9]{3}\-[0-9]{2})[^\}]+}!',$item,$item_match); 

       if(!empty($item_match[1][0])){ 
        $refIDs[] = $item_match[1][0]; 
       } 
      } 
     } 
     return $refIDs; 

} 

$refIDs = crawlSite($url); 
print_r($refIDs); 

?> 
+0

Хорошо, хорошо .. но как я могу получить только «ref», когда «label» является «P»? Эта строка является частью json внутри html. Существует способ получить json используя preg_match и использовать json_decode()? URL-адрес: www.netshoes.com.br/produto/031-0132-172-02 – adrianogf

+0

Это ваш сайт (доступ к оригинальному json) или вы его разрабатываете? –