代码之家  ›  专栏  ›  技术社区  ›  Naveed

PHP中的正则表达式:如何在HTML中为表创建模式

  •  1
  • Naveed  · 技术社区  · 15 年前

    我正在使用最新的PHP。我想解析HTML页面以获取数据。

    HTML:

    <table class="margin15" style="margin-left: 0pt; margin-right: 0pt;" width="100%" align="left" border="0" cellpadding="0" cellspacing="0">
    TRs, TDs, Data
    </table>
    
    <table class="margin15" style="margin-left: 0pt; margin-right: 0pt;" width="100%" align="left" border="0" cellpadding="0" cellspacing="0">
    TRs, TDs, Data
    </table>
    
    <table class="margin15" style="margin-left: 0pt; margin-right: 0pt;" width="100%" align="left" border="0" cellpadding="0" cellspacing="0">
    TRs, TDs, Data
    </table>
    
    <table class="margin15" style="margin-left: 0pt; margin-right: 0pt;" width="100%" align="left" border="0" cellpadding="0" cellspacing="0">
    TRs, TDs, Data
    </table>
    

    PHP代码:

    <?php
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://www.test.com/mypage.html');  
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($ch);
    
    
    $pattern = '/<table class="margin15" style="margin-left: 0pt; margin-right: 0pt;" width="100%" align="left" border="1" cellpadding="0" cellspacing="0">[^~]</table>/';
    preg_match_all($pattern, $result, $matches);
    print_r($matches);
    
    ?>
    

    我拿不到所有的桌子。当我使用简单 $pattern='/table/'; ,它给了我确切的结果。如何创建一个模式以在一个数组位置获取整个表?

    4 回复  |  直到 15 年前
        1
  •  6
  •   Yacoby    15 年前

    使用regex解析HTML最多是一种痛苦,因为HTML不是常规的,我建议您使用 Simple HTML DOM .

        2
  •  3
  •   Community Mr_and_Mrs_D    7 年前

    You can't parse [X]HTML with regex ,但您可以尝试:

    $pattern = '#<table(?:.*?)>(.*?)</table>#';
    

    如果有嵌套表,这将不起作用。

        3
  •  2
  •   Community Mr_and_Mrs_D    7 年前

    请看一下 this answer . 它描述了在PHP中HTML解析器的用法,这是您想要做的。

        4
  •  1
  •   AntonioCS    15 年前

    或者只使用PHP提供的DOM类。我认为它可以和简单的HTML DOM做同样的事情,但是速度要快得多(不要误解我,我真的很喜欢简单的HTML DOM,但是对于有几十行的文件来说,它很慢)