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

HTML を RegEx で解析しないでください。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 に答える