2013-03-20 32 views
1

大家好,我正在使用正則表達式,並且在內容中有空格或換行符時無法使其正常工作。PHP和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); 
+5

你應該爲此使用DOM解析器,而不是正則表達式。 – 2013-03-20 18:34:24

+0

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags#answer-1732454 – webbiedave 2013-03-20 18:36:47

+0

你可以在標籤之間添加'[\ h \ v] *'該模式 – 2013-03-20 18:37:40

回答

2

不要用正則表達式解析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>'; 
} 

如果你不確定它的結構,你需要一些更復雜的東西。

0

同意,你應該使用DOM。但是你不採取空白的賬戶之間

嘗試:

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