0

我想在一个特殊的 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"
  }

我怎么才能得到它?

4

1 回答 1

1

解析 HTML 不应该通过 RegEx 完成。像这样更好地使用 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);
于 2013-04-22T15:00:12.347 回答