php preg_match搜索模式

时间:2013-04-03 21:09:52

标签: php html-parsing preg-match-all

我有一张桌子,想得到一个二维数组(每行和每行的单元格值)。 我知道我必须使用preg_match,但我不擅长创建模式。

你可以帮帮我吗?会很好!!!!

谢谢!!!

这是我的表结构:

<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>

1 个答案:

答案 0 :(得分: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);

?>