我在网站上有类似这样的内容:
<div class="latestItemIntroText">
<div class="itemLinks">
<div class="share">Share</div>
<div class="dummy-div"></div>
<div class="addthis_sharing_toolbox"></div>
</div>
Lorem ipsum <br /><br />
Lorem ipsum <br /><br />
Lorem ipsum <br /><br />
Lorem ipsum <br /><br />
</div>
我只需要Lorem ipsum这个文本。我试着像这样做这个正则表达式代码:
</div>([\s?]+[^<]+[<br?/?>]*[^<]+[<br?/?>]*[^<]+[<br?/?>]*[^<]+)</div>
我看到这部分我重复了很多次:
[^<]+[<br?/?>]*
- &gt;因为我不知道会有多少次与lorem pisum,也许一次,也许10次......是否有可能缩短这个正则表达式?
答案 0 :(得分:2)
使用Regex for HTML字符串不是一个好方法,而是使用DOMDocument
。
<?php
ini_set('display_errors', 1);
$string = <<<HTML
<div class="latestItemIntroText">
<div class="itemLinks">
<div class="share">Share</div>
<div class="dummy-div"></div>
<div class="addthis_sharing_toolbox"></div>
</div>
Lorem ipsum <br /><br />
Lorem ipsum <br /><br />
Lorem ipsum <br /><br />
Lorem ipsum <br /><br />
</div>
HTML;
$domDocument = new DOMDocument();
$domDocument->loadHTML($string);
$domXPath = new DOMXPath($domDocument);
$results = $domXPath->query('//div[@class="itemLinks"]');
$toRemove[]=$results->item(0);
foreach($toRemove as $removal)
{
$removal->parentNode->removeChild($removal);
}
$results = $domXPath->query('//div[@class="latestItemIntroText"]');
print_r($results->item(0)->textContent);
答案 1 :(得分:0)
这个简单的正则表达式适用于您的输入。所有关于百万种不同方式的常见警告都适用。
^(?!.*(?:<div|</div>))(.+?)(?=<br\s?/>|$)
<br/>
或EOL。