1

大家好,我在使用正则表达式时遇到了问题,当内容中有空格或换行符时,它无法正常工作。

$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);
4

2 回答 2

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>';
}

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

于 2013-03-20T18:41:18.123 回答
0

同意你应该使用 DOM。但是你没有考虑到和之间的空格

尝试:

preg_match_all('/<dt><span>(.*)<\/span><\/dt>.*<dd>(.*)<\/dd>/',$content, $output);
于 2013-03-20T18:38:13.673 回答