2011-07-05 58 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><?