正则表达式 - 如何重复正则表达式代码

时间:2017-05-24 14:32:53

标签: php html regex

我在网站上有类似这样的内容:

 <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次......是否有可能缩短这个正则表达式?

2 个答案:

答案 0 :(得分:2)

使用Regex for HTML字符串不是一个好方法,而是使用DOMDocument

Try this code snippet here

<?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?/>|$)
  1. 向前看通过负向前瞻看到任何div标签。
  2. 通过积极的向前看,不情愿地将文字捕获到<br/>或EOL。
  3. https://regex101.com/r/ePaFrp/4/