如何preg_match php html标签?

时间:2014-10-01 12:25:08

标签: php preg-match

如何仅输出123456654321

这是html代码:

<div class="nb"><i class="id"></i>123456</div>
<div class="nb"><i class="id"></i>654321</div>
<div>another dummy text</div>

我在下面尝试了此代码,但这只是从123456输出到所有代码。

preg_match("~<i class=\"id\"></i>(.*)</div>~", $var, $A);
print $A[1];

3 个答案:

答案 0 :(得分:1)

我建议你为此目的使用HTML Parser,实际上我建议使用DOMDocument而不是simple-html-dom,因为DOMDocument已经内置,所以不需要另一个库导入。

在此示例中,定位那些<i>标记并指向那些作为文本的下一个兄弟:

$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($string);
libxml_clear_errors();

echo '<br/>';
foreach($dom->getElementsByTagName('i') as $i) {
    echo $i->nextSibling->textContent . '<br/>';
}

所以这样做实际上是针对这些:

<i class="id"></i>123456
^^ this element, and then inside the loop get the next sibling which is the `123456`

答案 1 :(得分:0)

我认为你需要

preg_match_all

模式应该是这样的:

'<div class="nb"><i class="id"></i>([0-9]+)</div>'

答案 2 :(得分:0)

试试这个

<?php

$source='<div class="nb"><i class="id"></i>123456</div>
 <div class="nb"><i class="id"></i>654321</div>';
  preg_match_all("'<div class=\"nb\"><i class=\"id\"></i>(.*?)</div>'", $source, $match);
print_r($match);
foreach($match[1] as $val)
  {
      echo $val."<br>";
  }

?>

它对我有用