我有一个包含表格的源页面,该表格包含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>
标签内部获取内容,然后预取我页面上的内容。
答案 0 :(得分:0)
这样做的方法当然是使用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";
}
答案 1 :(得分:0)
回答实际的regex问题:
您需要使用/s
DOTALL模式,以便在多行与(.*?)
之间进行匹配。
</td>
和</tr>
之间有空格,因此需要
preg_match_all('#<tr class="hlRow"(.*?)</td>\s*</tr>#is'
如果您使用#
作为文字字符,请注意/
分隔符。