繁体   English   中英

PHP和preg_match_all的正则表达式问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM