Maison  >  Article  >  développement back-end  >  Expressions régulières PHP : comment faire correspondre tous les tableaux en HTML

Expressions régulières PHP : comment faire correspondre tous les tableaux en HTML

WBOY
WBOYoriginal
2023-06-23 09:21:321261parcourir

Lorsque vous utilisez PHP pour traiter des pages HTML, si vous avez besoin d'obtenir toutes les données du tableau de la page, vous pouvez utiliser des expressions régulières. Cet article vous montrera comment utiliser les expressions régulières PHP pour faire correspondre tous les tableaux en HTML.

1. Comprendre la structure des tableaux en HTML

Lorsque nous utilisons des expressions régulières pour faire correspondre des tableaux en HTML, nous devons d'abord comprendre la structure des tableaux en HTML. Un tableau HTML de base contient généralement les parties suivantes :

<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. Utilisez des expressions régulières PHP pour faire correspondre les tableaux en HTML

Avec une compréhension de la structure du tableau HTML, nous pouvons utiliser des expressions régulières PHP pour faire correspondre la structure entière du tableau, les détails spécifiques Les étapes sont les suivantes :

  1. Utilisez la fonction PHP file_get_contents() pour obtenir le code source de la page HTML et enregistrez-le dans une variable chaîne.
$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

上述代码中,通过正则表达式匹配出每个表格的表头、表主体和表尾,然后再使用正则表达式来匹配其中的数据。注意,由于每个表格的数据是不同的,所以在匹配表身和表尾数据时需要使用 foreachUtilisez des expressions régulières pour faire correspondre tous les tableaux en HTML et enregistrez-les dans des variables de tableau. rrreee

Dans l'expression régulière ci-dessus, /4f8b7a22edf23d5bf38996387821347e]*>(.*?)f16b1740fad44fb09bfe928bcc527e08/is est utilisé Regular expression correspondant aux tableaux HTML. Parmi eux, 4f8b7a22edf23d5bf38996387821347e]*> correspond à la balise de début f5d188ed2c074f8b944552db028f98a1 (.*?) ; la balise du milieu Tout le contenu ; f16b1740fad44fb09bfe928bcc527e08 correspond à la balise de fermeture f5d188ed2c074f8b944552db028f98a1 et /is représente . peut correspondre à n'importe quel caractère (y compris les caractères de nouvelle ligne), <code>* signifie correspondre à zéro ou plusieurs caractères précédents.

    Parcourez la variable du tableau $table_arr, obtenez le contenu de chaque table et analysez davantage chaque élément de données.
rrreee

Dans le code ci-dessus, l'en-tête, le corps et le pied de page de chaque tableau correspondent à des expressions régulières, puis les expressions régulières sont utilisées pour faire correspondre les données. Notez que puisque les données de chaque table sont différentes, vous devez utiliser une boucle foreach pour traiter ligne par ligne lors de la correspondance des données du corps du tableau et du pied de page du tableau.

🎜3. Résumé🎜🎜Grâce aux étapes ci-dessus, nous pouvons utiliser des expressions régulières PHP pour faire correspondre tous les tableaux en HTML et enregistrer les données dans des variables de tableau. Bien entendu, en raison de la complexité de la structure du tableau HTML, il peut y avoir certaines inexactitudes dans l'utilisation d'expressions régulières pour faire correspondre les données qu'il contient, et cela doit être ajusté en fonction de la situation réelle. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn