正则表达式获取php中div类的内容

时间:2010-08-10 07:08:53

标签: php html regex

  

可能重复:
  PHP DOMDocument, finding specific tags
  How to parse and process HTML with PHP?

在php中的RegExp中是否有任何特殊的语法来获取具有唯一类名的嵌套div元素。 考虑我有一个像

这样的语法
<div style="demo">
<div class="row">
    <div title="abc@examples.com" class="text">ABC</div>
</div>
<div class="row">
    <div title="pqr@examples.com" class="text">PQR</div>
</div></div>

这里我们如何使用RegExp和preg_match_all()检索所有emailid。

3 个答案:

答案 0 :(得分:5)

正则表达式不善于解析HTML。使用DOM Parser和此XPath:

//div[@style="demo"]/div[@class="row"]/div[@class="text"]/@title

如果class="text"仅限于您想要匹配的div,您也可以

//div[@class="text"]/@title

另见:

答案 1 :(得分:1)

preg_match_all("/<div title=\"(.*)\" class=\"text\">/", $subject, $matches);

如果电子邮件是您想要的唯一数据,则仅有匹配电子邮件的更好的正则表达式。见http://fightingforalostcause.net/misc/2006/compare-email-regex.php

答案 2 :(得分:0)

<?php

$html = '<div style="demo">
<div class="row">
    <div title="abc@examples.com" class="text">ABC</div>
</div>
<div class="row">
    <div title="pqr@examples.com" class="text">PQR</div>
</div></div>
';

$doc = DOMDocument::loadHTML($html);
$xpath = new DOMXPath($doc);

foreach($xpath->query('//div[@style="demo"]/div[@class="row"]/div[@class="text"]/@title') as $div){
    echo $div->value . PHP_EOL;
}

这假设类属性正是那些(逐字),但我希望你能理解。