2014-10-01 2 views
-2

как я могу вывести 123456 и 654321 только?Как preg_match php html теги?

Это 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

Ваше регулярное выражение будет излишне сложным. Есть ли причина, по которой вы не можете использовать библиотеку, например [Simple HTML DOM] (http://simplehtmldom.sourceforge.net/)? – wavemode

+0

Им жаль, что я не знаю, просто HTML DOM. любая вещь, которая работает на php, будет делать. я просто хочу вывести 123456 и 654321 –

+3

@ChamindaNuwan - Так изучите его. – Quentin

ответ

0

Я думаю, что вам нужно

preg_match_all

образец должен быть чем-то вроде этого:

'<div class="nb"><i class="id"></i>([0-9]+)</div>' 
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` 
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>"; 
    } 

?> 

это работает для меня

Смежные вопросы