从html标签获取带有子串的数组

时间:2013-04-22 14:51:30

标签: php

我希望在一个特殊的html标记中获取所有子字符串内容,在示例中为

<b></b>:

 function getTextBetweenTags($string, $tagname) {
   $pattern = "/<$tagname ?.*>(.*)<\/$tagname>/";
   preg_match($pattern, $string, $matches);
   return $matches;
}

$message = "<p> Te informamos que la parada <b> Avenida de la Vega </b> 
  se ha llenado, el día <b>2013-04-22 </b> a las <b>08:23:27</b>.
  <br><br> No olvides cerrar este ticket cuando hayas resuelto incidencia.
  <br><br> Gracias </p>";


 $result = getTextBetweenTags($message, "b");
 var_dump($txt);

我明白了:

array(2) {
  [0]=>
   string(90) "<b> Avenida de la Vega </b> se ha llenado, el día <b>2013-04-22 </b> a las <b>08:23:27</b>"
  [1]=>
  string(8) "08:23:27"
 }

我想:

array(3) {
  [0]=>
   string(20) "Avenida de la Vega" 
   [1]=>
    string(10) "2013-04-22"
   [2]=>
    string(8) "08:23:27"
  }

我怎样才能得到它?

1 个答案:

答案 0 :(得分:1)

不应通过RegEx解析HTML。更好地使用这样的DOM:

$html='
<p> Te informamos que la parada <b> Avenida de la Vega </b> 
  se ha llenado, el día <b>2013-04-22 </b> a las <b>08:23:27</b>.
  <br><br> No olvides cerrar este ticket cuando hayas resuelto incidencia.
  <br><br> Gracias </p>';
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html); // loads your html
$nodeList = $doc->getElementsByTagName('b');
$items = array();
for($i=0; $i < $nodeList->length; $i++) {
    $node = $nodeList->item($i);
    $items[] = $node->nodeValue;
}
print_r($items);