Heim  >  Artikel  >  Backend-Entwicklung  >  Reguläre PHP-Ausdrücke: Wie alle Tabellen in HTML abgeglichen werden

Reguläre PHP-Ausdrücke: Wie alle Tabellen in HTML abgeglichen werden

WBOY
WBOYOriginal
2023-06-23 09:21:321307Durchsuche

Wenn Sie PHP zum Verarbeiten von HTML-Seiten verwenden und alle Tabellendaten von der Seite abrufen müssen, können Sie reguläre Ausdrücke verwenden. In diesem Artikel erfahren Sie, wie Sie reguläre PHP-Ausdrücke verwenden, um alle Tabellen in HTML abzugleichen.

1. Verstehen Sie die Struktur von Tabellen in HTML

Wenn Sie reguläre Ausdrücke verwenden, um Tabellen in HTML abzugleichen, müssen wir zunächst die Struktur von Tabellen in HTML verstehen. Eine einfache HTML-Tabelle enthält normalerweise die folgenden Teile:

<table>        <!-- 表格开始标签 -->
    <caption>表格标题</caption>     <!-- 表格标题 -->
    <thead>      <!-- 表头开始标签 -->
        <tr>       <!-- 表头行开始标签 -->
            <th>列名1</th>       <!-- 表头第一列 -->
            <th>列名2</th>       <!-- 表头第二列 -->
            ...
        </tr>       <!-- 表头行结束标签 -->
    </thead>     <!-- 表头结束标签 -->
    <tbody>      <!-- 表格主体开始标签 -->
        <tr>       <!-- 行开始标签 -->
            <td>数据1</td>       <!-- 第一列数据 -->
            <td>数据2</td>       <!-- 第二列数据 -->
            ...
        </tr>       <!-- 行结束标签 -->
        ...
    </tbody>    <!-- 表格主体结束标签 -->
    <tfoot>      <!-- 表格尾部开始标签 -->
        <tr>       <!-- 表尾行开始标签 -->
            <td>统计数据</td>    <!-- 表尾第一列数据 -->
            <td>统计数据</td>    <!-- 表尾第二列数据 -->
            ...
        </tr>       <!-- 表尾行结束标签 -->
    </tfoot>     <!-- 表格尾部结束标签 -->
</table>       <!-- 表格结束标签 -->

2. Verwenden Sie reguläre PHP-Ausdrücke, um Tabellen in HTML abzugleichen.

Mit einem Verständnis der HTML-Tabellenstruktur können wir reguläre PHP-Ausdrücke verwenden, um die gesamte Tabellenstruktur, die spezifischen, abzugleichen Die Schritte sind wie folgt:

  1. Verwenden Sie die PHP-Funktion file_get_contents(), um den Quellcode der HTML-Seite abzurufen und ihn in einer String-Variablen zu speichern.
$url = 'http://www.example.com/';     // HTML 页面的 URL 地址
$html = file_get_contents($url);      // 获取 HTML 页面的源代码
    file_get_contents() 函数获取 HTML 页面的源代码,并将其保存在字符串变量中。
preg_match_all('/<table[^>]*>(.*?)</table>/is', $html, $table_arr);
  1. 使用正则表达式来匹配 HTML 中所有的表格,并将其保存在数组变量中。
foreach ($table_arr[0] as $table_html) {
    // 解析出每个表格中的表头、表主体、表尾等内容
    preg_match_all('/<thead[^>]*>(.*?)</thead>.*?<tbody[^>]*>(.*?)</tbody>.*?<tfoot[^>]*>(.*?)</tfoot>/is', $table_html, $table_content);

    // 获取表头数据
    $thead_html = $table_content[1][0];       // 获取表头 HTML 代码
    preg_match_all('/<th[^>]*>(.*?)</th>/is', $thead_html, $thead);      // 匹配表头数据

    // 获取表身数据
    $tbody_html = $table_content[2][0];       // 获取表身 HTML 代码
    preg_match_all('/<tr[^>]*>(.*?)</tr>/is', $tbody_html, $tbody_rows);     // 匹配每一行数据
    foreach ($tbody_rows[1] as $tbody_row_html) {
        preg_match_all('/<td[^>]*>(.*?)</td>/is', $tbody_row_html, $tbody_row);      // 匹配每个单元格
        $tbody_data[] = $tbody_row[1];     // 添加每一行的数据到表身数据数组中
    }

    // 获取表尾数据
    $tfoot_html = $table_content[3][0];       // 获取表尾 HTML 代码
    preg_match_all('/<td[^>]*>(.*?)</td>/is', $tfoot_html, $tfoot);      // 匹配表尾数据
    $tfoot_data = $tfoot[1];

    // 将表格的各个数据保存在其中一个数组中
    $table_data[] = array(
        'thead'     => $thead[1],
        'tbody'     => $tbody_data,
        'tfoot'     => $tfoot_data
    );
}

上述正则表达式中,/4f8b7a22edf23d5bf38996387821347e]*>(.*?)f16b1740fad44fb09bfe928bcc527e08/is 是用于匹配 HTML 表格的正则表达式。其中,4f8b7a22edf23d5bf38996387821347e]*> 匹配 f5d188ed2c074f8b944552db028f98a1 开始标签;(.*?) 匹配中间的所有内容;f16b1740fad44fb09bfe928bcc527e08 匹配 f5d188ed2c074f8b944552db028f98a1 结束标签,/is 表示正则表达式中的 . 可以匹配任意字符(包括换行符),* 表示匹配零个或多个前面的字符。

  1. 遍历数组变量 $table_arr ,获取其中每个表格的内容,并进一步解析出其中的各个数据项。
rrreee

上述代码中,通过正则表达式匹配出每个表格的表头、表主体和表尾,然后再使用正则表达式来匹配其中的数据。注意,由于每个表格的数据是不同的,所以在匹配表身和表尾数据时需要使用 foreachVerwenden Sie reguläre Ausdrücke, um alle Tabellen in HTML abzugleichen und sie in Array-Variablen zu speichern. rrreee

Im obigen regulären Ausdruck wird /4f8b7a22edf23d5bf38996387821347e]*>(.*?)f16b1740fad44fb09bfe928bcc527e08/is als regulärer Ausdruck verwendet Ausdruck, der mit HTML-Tabellen übereinstimmt. Unter diesen stimmt 4f8b7a22edf23d5bf38996387821347e]*> mit dem f5d188ed2c074f8b944552db028f98a1 Start-Tag überein; (.*?) stimmt überein das mittlere Tag Alle Inhalte; f16b1740fad44fb09bfe928bcc527e08 entspricht dem schließenden Tag f5d188ed2c074f8b944552db028f98a1 und /is steht für . mit jedem Zeichen (einschließlich Zeilenumbrüchen) übereinstimmen. <code>* bedeutet, dass kein oder mehr vorherige Zeichen übereinstimmen.

    Durchlaufen Sie die Array-Variable $table_arr, erhalten Sie den Inhalt jeder Tabelle und analysieren Sie jedes Datenelement weiter.
rrreee

Im obigen Code werden die Kopf-, Haupt- und Fußzeilen jeder Tabelle durch reguläre Ausdrücke abgeglichen, und dann werden die regulären Ausdrücke zum Abgleichen der Daten verwendet. Beachten Sie, dass Sie, da die Daten jeder Tabelle unterschiedlich sind, eine foreach-Schleife verwenden müssen, um beim Abgleichen von Tabellenhaupt- und Tabellenfußdaten Zeile für Zeile zu verarbeiten.

🎜3. Zusammenfassung🎜🎜Durch die oben genannten Schritte können wir reguläre PHP-Ausdrücke verwenden, um alle Tabellen in HTML abzugleichen und die Daten in Array-Variablen zu speichern. Aufgrund der Komplexität der HTML-Tabellenstruktur kann es natürlich zu Ungenauigkeiten bei der Verwendung regulärer Ausdrücke zum Abgleichen der darin enthaltenen Daten kommen, und diese müssen entsprechend der tatsächlichen Situation angepasst werden. 🎜

Das obige ist der detaillierte Inhalt vonReguläre PHP-Ausdrücke: Wie alle Tabellen in HTML abgeglichen werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn