preg_match html代码<request> </request>

时间:2014-01-13 17:51:13

标签: php curl preg-match

我使用cURL向服务器发送请求,这是链接:Server Side script for cURL request 我用file_get_contents('php:// input')读取已发送的数据; 但我的xml周围有一些讨厌的数据。所以我认为使用preg_match只选择xml。 像这样:

$arq = file_get_contents('php://input');
$wanted="/\<request\>(.*?)\<\/request\>/i";
preg_match($wanted, $arq, $result);
echo $result;

这是$ arq:

的内容
------------------------------9e2a86ef9445
Content-Disposition: form-data; name="data"

<request>
<session>
 <user>exampleuser</user>
 <pass>examplepass</pass>
</session>
</request>
------------------------------9e2a86ef9445--

我怎样才能阅读之间的所有内容 因为它内部的内容不是静态的,它是动态的,并且在分离的请求中可能是不同的。

非常感谢你。

3 个答案:

答案 0 :(得分:1)

你应该查看php的DOMDocumentDOMXpath ..你会拥抱自己:)它非常强大。不需要正则表达式。我亲自做了很多网络搜索。

答案 1 :(得分:1)

使用DOMDocument Class不是这么简单吗?

<?php
$html='some nasty data
<request>
<session>
 <user>exampleuser</user>
 <pass>examplepass</pass>
</session>
</request>
and samo nasty data here';

$dom = new DOMDocument;
@$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('session') as $tag) {
    echo $tag->nodeValue."<br>";
}

输出:

exampleuser
examplepass

答案 2 :(得分:1)

您可以使用由我修改的Gumbo最初编写的此正则表达式来满足您的需求。

<?php
$html='------------------------------9e2a86ef9445
Content-Disposition: form-data; name="data"

<request>
<session>
 <user>exampleuser</user>
 <pass>examplepass</pass>
</session>
</request>
------------------------------9e2a86ef9445--';
$tagname = 'request';

$pattern = '/<'.preg_quote($tagname, '/').'(?:[^"\'>]*|"[^"]*"|\'[^\']*\')*>(.*?)<\/'.preg_quote($tagname, '/').'>/s';
preg_match_all($pattern, $html, $matches);

echo $thefilteredXML = $matches[0][0];

OUTPUT(就像在浏览器的视图源中一样):

<request>
<session>
 <user>exampleuser</user>
 <pass>examplepass</pass>
</session>
</request>