2013-04-03 134 views
-2

我有一個表,並希望得到一個2d數組(每行和每行的單元格值)。 我知道我必須使用preg_match,但我不擅長創建模式。php preg_match搜索模式

可以幫我嗎?將veeeeeery很好!

謝謝!!!

這裏是我的表結構:

<table class="maintable"> 
<tr> 
<td class="headtable"> 
Tag 
</td> 
<td class="headtable"> 
Klasse 
</td> 
<td class="headtable"> 
Zeit 
</td> 
<td class="headtable"> 
Pos 
</td> 
<td class="headtable"> 
Lehrer 
</td> 
<td class="headtable"> 
Fach 
</td> 
<td class="headtable"> 
Raum 
</td> 
<td class="headtable"> 
Info 
</td> 
<td class="headtable"> 
Art 
</td> 
</tr> 
<tr class="evenrow"> 
<td class="evencell"> 
Mo 
</td> 
<td class="evencell"> 
05a 
</td> 
<td class="evencell"> 
09:45 
</td> 
<td class="evencell"> 
3. Stunde 
</td> 
<td class="evencell"> 
+TIN (KOL) 
</td> 
<td class="evencell"> 
In En 
</td> 
<td class="evencell"> 
223 
</td> 
<td class="evencell"> 

</td> 
<td class="evencell"> 
Geändert 
</td> 
</tr> 
<tr class="oddrow"> 
<td class="oddcell"> 
&nbsp 
</td> 
<td class="oddcell"> 
&nbsp 
</td> 
<td class="oddcell"> 
10:30 
</td> 
<td class="oddcell"> 
4. Stunde 
</td> 
<td class="oddcell"> 
+TIN (KOL) 
</td> 
<td class="oddcell"> 
In En 
</td> 
<td class="oddcell"> 
223 
</td> 
<td class="oddcell"> 

</td> 
<td class="oddcell"> 
Geändert 
</td> 
</tr> 
<tr class="evenrow"> 
<td class="evencell"> 
&nbsp 
</td> 
<td class="evencell"> 
&nbsp 
</td> 
<td class="evencell"> 
13:45 
</td> 
<td class="evencell"> 
8. Stunde 
</td> 
<td class="evencell"> 
+NUS (CRI), WIK 
</td> 
<td class="evencell"> 
Comp 
</td> 
<td class="evencell"> 
022 INF2, 021 INF1 
</td> 
<td class="evencell"> 

</td> 
<td class="evencell"> 
Geändert 
</td> 
</tr> 
<tr class="oddrow"> 
<td class="oddcell"> 
&nbsp 
</td> 
<td class="oddcell"> 
05b 
</td> 
<td class="oddcell"> 
07:55 
</td> 
<td class="oddcell"> 
1. Stunde 
</td> 
<td class="oddcell"> 
+WEP (SMA) 
</td> 
<td class="oddcell"> 
EN 
</td> 
<td class="oddcell"> 
121 
</td> 
<td class="oddcell"> 

</td> 
<td class="oddcell"> 
Geändert 
</td> 
</tr> 
</table> 
+4

不,你不需要使用的preg_match。 **不要使用正則表達式來解析HTML **。你不能用正則表達式可靠地解析HTML,你將面臨悲傷和挫折。只要HTML從你的期望改變,你的代碼就會被破壞。有關如何使用已經編寫,測試和調試的PHP模塊正確解析HTML的示例,請參閱http://htmlparsing.com/php。 – 2013-04-03 21:12:10

+0

使用[DOMDocument](http://php.net/manual/en/class.domdocument.php) – 2013-04-03 21:18:43

回答

3

正如評論,這是不使用正則表達式解析HTML是一個好主意說。 總之,這裏是你如何能使用preg_match_all假設$input包含輸入字符串實現它:

<?php 

preg_match_all('#<tr[^>]*>(.*?)</tr>#is', $input, $lines); 

$result = array(); 

foreach ($lines[1] as $k => $line) { 
    preg_match_all('#<td[^>]*>(.*?)</td>#is', $line, $cell); 

    foreach ($cell[1] as $cell) { 
     $result[$k][] = trim($cell); 
    } 
} 

var_dump($result); 

?> 
+0

謝謝,但你給我的鏈接是完美的! – Oskar 2013-04-03 22:32:27