2016-09-17 1 views
0

У меня есть эти пролетных метки:Получить содержимое между HTML-теги с идентификатором внутри

<div> 
<span style="background: url('/wp-content/themes/minimum-child/img/address.png') 0px 2px no-repeat; padding-left: 20px;">CONTENT 1</span> 
<span style="background: url('/wp-content/themes/minimum-child/img/email.png') 0px 2px no-repeat; padding-left: 20px;"><a href="mailto:[email protected]">CONTENT 2</a></span> 
<span style="background: url('/wp-content/themes/minimum-child/img/tel.png') 0px 2px no-repeat; padding-left: 20px;">CONTENT 3</span> 
</div> 

и мне нужно, чтобы получить содержимое между пролетами, но мне нужно, чтобы отделить содержимое для отдельных переменных $address, $email, $phone , $web и т. Д. Ясно, что я могу использовать название фоновых изображений в качестве шаблонов, потому что имена изображений все те же (адрес.png, email.png и т. Д.)

До сих пор я думаю, что необходимо использовать функцию preg_match_all, я уже пробовал, но до сих пор я не был успешный.

Я пытался (для получения адреса в $address переменной):

$url="'/wp-content/themes/minimum-child/img/address.png'"; 
$tag='span style="background: url('.$url.')'; 
$matches=array(); 
$pattern = "/<$tag ?.*>(.*)<\/span>/"; 
preg_match($pattern, $htmlcontent, $matches); 
$address=$matches[1]; 

К сожалению, это не работает. Есть ли у вас какие-либо идеи по его достижению?

+0

является его 'SPAN' содержание (то есть:' content_1, CONTENT_2' и т.д.) или 'style' атрибуты ('address.png' и т.д.), которые вы хотите, чтобы захватить? – RamRaider

+0

Привет, мне нужно захватить CONTENT_1 и т. Д. Шаблон должен быть, например, address.png – xjabla

ответ

0

Часто говорят, что разбор html с регулярным выражением полон проблем - поэтому я бы выбрал более простой способ использования DOMDocument для обработки обработки фрагмента html. Затем вы могли бы использовать регулярное выражение для дальнейшего уточнения некоторых возможно, при желании.

$html=' 
<div> 
    <span style="background: url(\'/wp-content/themes/minimum-child/img/address.png\') 0px 2px no-repeat; padding-left: 20px;">CONTENT 1</span> 
    <span style="background: url(\'/wp-content/themes/minimum-child/img/email.png\') 0px 2px no-repeat; padding-left: 20px;"><a href="mailto:[email protected]">CONTENT 2</a></span> 
    <span style="background: url(\'/wp-content/themes/minimum-child/img/tel.png\') 0px 2px no-repeat; padding-left: 20px;">CONTENT 3</span> 
</div>'; 


$dom=new DOMDocument; 
$dom->loadHTML($html); 

$col=$dom->getElementsByTagName('span'); 
$keep=array(
    'style'=>array(), 
    'data' =>array(), 
    'email'=>array() 
); 

foreach($col as $node){ 
    $keep['style'][]=str_replace("'", "", $node->getAttribute('style')); 
    $keep['data'][]=$node->nodeValue; 
    if($node->hasChildNodes()){ 
     foreach($node->childNodes as $child){ 
      if($child->nodeType==XML_ELEMENT_NODE && $child->hasAttribute('href')) { 
       list($mailto,$address)=explode(':',$child->getAttribute('href')); 
       $keep['email'][]=$address; 
      } 
     } 
    } 
} 
echo '<pre>',print_r($keep,true),'</pre>'; 


/* output 
    ------ 

    Array 
    (
     [style] => Array 
      (
       [0] => background: url(/wp-content/themes/minimum-child/img/address.png) 0px 2px no-repeat; padding-left: 20px; 
       [1] => background: url(/wp-content/themes/minimum-child/img/email.png) 0px 2px no-repeat; padding-left: 20px; 
       [2] => background: url(/wp-content/themes/minimum-child/img/tel.png) 0px 2px no-repeat; padding-left: 20px; 
      ) 

     [data] => Array 
      (
       [0] => CONTENT 1 
       [1] => CONTENT 2 
       [2] => CONTENT 3 
      ) 

     [email] => Array 
      (
       [0] => [email protected] 
      ) 

    ) 
*/