preg_match_all, начиная с определенного HTML-тега и заканчивая им - PullRequest
0 голосов
/ 06 января 2012

У меня есть исходная страница с таблицей, которая состоит из 15 строк с этим содержимым:

<tr class="hlRow" onclick="window.location=link11.href" onmouseover="rowOver(11)" onmouseout="rowOut(11,'#cad9ea')">
  <td class="row3">Latest news</td>
  <td class="row3" id="row_6_11"><a onclick="servOC(11,'/link-to-page.html','',ihTri11)"><img class="tog" id="ihTri11" src="up.png" title="Toggle" height="19" width="19" /></a>14.7w</td>
  <td class="row3" id="name11"><a href="/link-to-page.html" style="float: right; color: green; font-weight: bold;" title="+2 rating, 2 comments">+2<img src="star.png" alt="rating" style="margin-left: 1px;" height="12" width="12" /> 2<img src="bubble.png" alt="comments" style="margin-left: 2px;" height="10" width="10" /></a><a id="link11" href="/link-to-page.html">Got to page</a></td>
  <td class="row3" title="11 files">10 days</td>
  <td class="row3">104</td>
  <td class="row3">108</td>
</tr>

В основном мне нужно взять эти строки между тегами <tr> до </tr> с исходного сайта и показатьих на моем.Я пытался использовать preg_match_all(), но так как мой опыт регулярных выражений очень ограничен, я просто не могу сделать это правильно.

preg_match_all('<tr class="hlRow"(.*?)</td></tr>/i', $turinys, $linkai, PREG_SET_ORDER);
foreach ($linkai as $linkas) {$a1 = $linkas[1]; echo "<table><tr class=\"hlRow\"".$a1."\"></td></tr></table>";}

Еще более удивительным было бы получение только содержимого изнутри <td>теги, а затем просмотреть их на моей странице.

Ответы [ 2 ]

0 голосов
/ 06 января 2012

Чтобы ответить на актуальный вопрос:

Вам необходим режим /s DOTALL для сопоставления нескольких строк с (.*?).

И есть промежуток между </td> и </tr>, поэтому потребуется

 preg_match_all('#<tr class="hlRow"(.*?)</td>\s*</tr>#is'

Также обратите внимание на разделители #, если вы используете / в качестве буквенных символов.

0 голосов
/ 06 января 2012

Способ сделать это, безусловно, с расширением DOM, а не с регулярным выражением. Разбор HTML с помощью регулярных выражений сведет вас с ума.

Код DOM может выглядеть следующим образом ...

$dom = new DOMDocument;
$dom->loadHtmlFile('your source url');

$xpath = new DOMXPath($dom);

$rows = $xpath->query('//tr[@class="hlRow"]');

$rowNumber = 1;

foreach ($rows as $row) {
    echo "Row number: ", $rowNumber++, "\n";
    foreach ($row->childNodes as $td) {
        if ($td->nodeName === 'td') {
            echo $td->nodeValue, "\n";
        }
    }
    echo "End of row\n\n";
}
...