PHP和preg_match_all的正则表达式问题

时间:2013-03-20 18:33:36

标签: php regex 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);

2 个答案:

答案 0 :(得分:2)

不要使用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>';
}

如果你不确定它的结构,你需要更复杂的东西。

答案 1 :(得分:0)

同意您应该使用DOM。但是你没有考虑到和

之间的空白

尝试:

preg_match_all('/<dt><span>(.*)<\/span><\/dt>.*<dd>(.*)<\/dd>/',$content, $output);