2011-07-05 109 views
3

我想知道一個很好的preg_match模式在php中提取標籤之間的數據。php preg_match解析標籤的模式

例如:

<page> 
    <username>someone</username> 
    <id>3020778</id> 
    <text xml:space="preserve"> The quick brown fox. </text> 
</page> 

這會給我的字符串 「敏捷的棕色狐狸」。

我一直在使用

preg_match('/<text(.*)?>(.*)?<\/text>/', $content, $match); 

嘗試,但它似乎在其他一些情況下無法正常工作。

有沒有人有更好的解決方案或模式?

並使用simpleXML使它比preg_match更快?

+2

通常來說,解析XML文檔幾乎總是比使用正則表達式更可靠。 – jerluc

+1

'$ page = simplexml_load_string($ xml); echo $ page-> username,$ page-> id,$ page-> text;'另請參閱[一個簡單的程序來CRUD節點的XML文件值](http://stackoverflow.com/questions/4906073/a-簡單程序到crud-node-and-node-values-of-xml-file),[用於PHP的最佳XML解析器](http://stackoverflow.com/questions/188414/best-xml-parser-for -php/3616044#3616044)和[最佳方法解析HTML](http://stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662) – Gordon

+0

這一個很好地總結: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – tdammers

回答

0
$a = '<page> 
<username>someone</username> 
    <id>3020778</id> 
    <text xml:space="preserve"> The quick brown fox. </text> 
</page>'; 

preg_match_all("(\<.+\>(.+)\<\/.+\>)U",$a, $r);  
?><pre><? print_r($r);?></pre><?