我正在尝试解析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;
要在一个数组中获取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));