如何仅输出123456
和654321
?
这是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];
答案 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>";
}
?>
它对我有用