0

我正在尝试解析 HTML 标签之间的信息。使用正则表达式,我怎样才能避免标题值,因为它们是不同的,只解析标签内的信息?

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=\"(.*)\"但它不起作用!关于我应该使用哪个正则表达式的任何建议?

非常感谢

4

1 回答 1

0

正则表达式不是为 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;

要在一个数组中dtstart同时获取...dtend

$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));
于 2013-11-10T12:40:11.917 回答