解析 HTML 标记中的信息,避免标题值


parsing information within HTML tags avoiding title value

我正在尝试解析HTML标记之间的信息。使用正则表达式,如何避免标题值,因为它们不同并仅解析标签内的信息?

网页代码:

<p class=period>
<abbr class=dtstart title=2010>2010</abbr>
<abbr class=dtend title=2012>2012</abbr> 
</p>

输出应该是这样的:2010年,2012

我正在使用此方法并且它工作正常,如果 title=2010:

$experience .= "<c:start_date>". trim($this->parse_text($tmp3[$i], "<abbr class='"dtstart'" title='"2010'">", "</abbr>"))."</c:start_date>'r'n";

我试过这个:title='"(.*)'"但它不起作用! 关于我应该使用哪个正则表达式的任何建议?

非常感谢

正则表达式不是为 HTML 解析而设计的。你最好使用 DOM/XPath:

$html = <<<HTML
<p class=period>
<abbr class=dtstart title=2010>2010</abbr>
<abbr class=dtend title=2012>2012</abbr> 
</p>
HTML;
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$dtstart = $xpath->query("//abbr[contains(@class, 'dtstart')]")->item(0)->nodeValue;
$dtend = $xpath->query("//abbr[contains(@class, 'dtend')]")->item(0)->nodeValue;

要在一个数组中获取dtstartdtend...

$dates = $xpath->query("//abbr[contains(@class, 'dtstart') or contains(@class, 'dtend')]");
list($dtstart, $dtend) = array_map(function ($node) {
    return $node->nodeValue;
}, iterator_to_array($dates));