[英]Regex issue with PHP and preg_match_all
大家好,我使用正则表达式时遇到问题,当内容中存在空格或换行符时,它无法正常工作。
$content = "<dt><span>Name:</span></dt>
<dd>
John
</dd>
<dt><span>Age:</span></dt>
<dd>
40
</dd>
<dt><span>Sex:</span></dt>
<dd>
Male
</dd>";
我正在使用的正则表达式是
preg_match_all('/<dt><span>(.*)<\/span><\/dt><dd>(.*)<\/dd>/',$content, $output);
不要使用RegEx解析HTML。 使用DOM。 这是一个确定HTML结构的示例。
$dom = new DOMDocument();
@$dom->loadHTML($content);
$xpath = new DOMXPath($dom);
$spans = $xpath->query('//span');
$dds= $xpath->query('//dd');
for ($i = 0; $i < $spans->length; $i++)
{
echo $spans->item($i)->nodeValue . $dds->item($i)->nodeValue . '<br>';
}
如果不确定其结构,则需要更复杂的东西。
同意您应该使用DOM。 但是,您没有考虑到和之间的空格
尝试:
preg_match_all('/<dt><span>(.*)<\/span><\/dt>.*<dd>(.*)<\/dd>/',$content, $output);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.