首页 > 解决方案 > 是否可以使用正则表达式解析 div 元素?

问题描述

我正在尝试从具有动态 id 的 div 中解析一些代码,例如:(其中 xxxx 代表随机数)。

有什么方法可以通过使用正则表达式匹配所有可能的 id 来抓取给定的 div 元素,例如 post-1111、post-1213 等。

这是我的代码:

dd`

    $target_html = $list_array[$i]->href;
    $ftp_html = file_get_html($target_html);

    $ftp_list = $ftp_html->find('div.main', 0);
    $ftp_array = $ftp_list->find('div#post-4885 a[id="player"]');
    for($j = 0; $j < sizeof($ftp_array); $j++){
      print_r($ftp_array[$j]->rel.'<br>');
    }
    echo '<hr>';

服务器上的示例 HTML:

<div class="main>
<div id="post-xxxx:>
   elements...

  </div></div>`

标签: phpregexweb-scrapingweb-crawler

解决方案


当然可以刮掉标签(仅)。

给你
(帖子 ID 在第 2 组,整个标签在第 0 组)

(?si)<div(?=(?:[^>"']|"[^"]*"|'[^']*')*?\sid\s*=\s*(?:(['"])\s*(post-\d+).*?\1))\s+(?:".*?"|'.*?'|[^>]*?)+>

https://regex101.com/r/VcWo2D/1

可读

 (?si)

 <div
 (?=
      (?: [^>"'] | " [^"]* " | ' [^']* ' )*?
      \s id \s* = \s* 
      (?:
           ( ['"] )                      # (1)
           \s* 
           ( post- \d+ )                 # (2)
           .*? 
           \1 
      )
 )
 \s+ 
 (?: " .*? " | ' .*? ' | [^>]*? )+
 >

推荐阅读