报废HTML细分时的正则表达式问题

时间:2011-01-24 06:08:26

标签: html regex

我正在尝试使用正则表达式来抓取锚之间的内容 "<h2>Highlights</h2>"&amp;以下HTML细分中的“</div><div class="FloatClear"></div><div id="SalesMarquee">”:

但是当我尝试这个正则表达式时,它什么也没有返回......

<h2>Highlights<\/h2>\t?\n?\s?\S?(.*?)<\/div>

我认为它可能与HTML源代码中的空白区域有关...

任何正则表达式专家都能给我一个神奇的表达方式来抓取任何给定的HTML存档之间的所有内容,比如上面提到的那些(也可以处理HTML源代码中的任何空白空间)?

BTW我不能使用任何PHP代码,因为正则表达式是我购买的脚本(只有一个文本框我必须进入正则表达式)...

非常感谢

HTML细分:

<div id="Highlights">

      <h2>Highlights</h2>

      <ul>

<li>1234</li>

<li>abc def asdasd asdasd</li>

<li>asdasda as asdasdasdas </li>

<li>asdasd asdasdas asdsad asdasd asa</li>

</ul>


     </div>

     <div class="FloatClear"></div>

     <div id="SalesMarquee">

      <div id="SalesMarqueeTemplate" style="display: none;">

4 个答案:

答案 0 :(得分:1)

使用任何HTML dom解析器,例如SIMPLE HTML DOM PARSER

// Create DOM from URL or file
$html = file_get_html('http://www.example.com/');

// Find all links
foreach($html->find('a') as $element)
       echo $element->href . '<br>'; 

答案 1 :(得分:1)

同意Naveed - 这是一篇类似的帖子 - Robust and Mature HTML Parser for PHP

答案 2 :(得分:0)

以下pcre正则表达式应该可以工作。

/<h2>.*<\/h2>(.*)<\/div>/is

最后两个字符是i表示忽略大小写,s表示点全部模式。点全部模式也使点匹​​配换行符。

编辑:你可能会想要这个正则表达式:

/<h2>Highlights<\/h2>(.*)<\/div>.*<div class="FloatClear">/is

答案 3 :(得分:0)

尝试添加'm'修饰符(对于hlindset提供的正则表达式为'multiline':

/<h2>Highlights<\/h2>(.*)<\/div>.*<div class="FloatClear">/ism

这是在行动:

所有修饰语的文档都可通过Google搜索“pcre pattern modifiers”获得。