正则表达式获取内容直到下一个div(不包含div)

时间:2011-02-03 22:14:09

标签: php regex

我有以下输入

<div style="s1">title1</div>
<div style="s1">content1</div>
<div style="s1">title2</div>
<div style="s1">content2</div>

我知道title1title2,我想收集content1和content2

我需要这样的东西:

<div style="s1">title1</div>.*?<div style="s1">(.*?)</div>

但由于regexp是贪婪的,它会匹配到最后,所以返回

content1</div>
    <div style="s1">title2</div>
    <div style="s1">content2

我想在模式中添加一个不应包含在匹配中的标记列表。

类似的东西:

<div style="s1">title1</div>.*?<div style="s1">(.*?[^<div])</div>

我将[^<div]引用到不包含的内容。这应该是多个选项,可能使用|

我该怎么做?

3 个答案:

答案 0 :(得分:4)

Obligitory link

现在已经不在了,只需做一些dom操作和xpath:

    $dom = new DOMDocument();
    @$dom->loadHTML($html);
    $x = new DOMXPath($dom);        

    foreach($x->query("//div") as $node)
    {
       if (trim($node->textContent) == 'title1')
       {
           $content['title1'] = $node->nextSibling->textContent;
       }
    }

现在不是那么容易吗?所以没有更多的regexing html kay?

答案 1 :(得分:0)

<div style="s1">title1</div>.*<div style="s1">(([^<]|<[^\/])*)</div>

试试这个 - 这意味着找到除了&lt;或者&lt;没有后跟/ - 如果你愿意,我可以为sub-div等添加条件。

答案 2 :(得分:0)