我有preg_match问题。如果xml文本如下所示,我应该preg_match。
<File label="asd 480p" type="lol" rate="1500" resolution="854x480">ValueIwant</File>
或者
<File label="720p" default="1">ValueIwant</File>
现在我正在使用这样的格式
preg_match("'<File label=\"(?:720|576|cat|asd 480p).{1,50}>(.*?)</File>'si", $streamdata, $streamurl);
但它仅适用于我的第二个示例代码中的值&lt;文件标签=“720p”默认=“1”&gt;
答案 0 :(得分:1)
preg_match("'<File label=\"[(720)(576)(cat)(asd 480)].+>(.*)<\/File>'si", $streamdata, $streamurl);
如果将{1,50}替换为高于50的数字或仅加号(+),那么您发布的正则表达式也应该有用。
答案 1 :(得分:0)
通常最好使用XML解析器而不是preg_match来处理XML。例如:
$xmlDoc = new DOMDocument();
$xmlDoc->loadXML( '<xml>
<File label="asd 480p" type="lol" rate="1500" resolution="854x480">ValueIwant</File>
<File label="720p" default="1">ValueIwant</File>
</xml>' );
$searchNode = $xmlDoc->getElementsByTagName( "File" );
foreach( $searchNode as $searchNode ) {
$label = $searchNode->getAttribute('label');
$value = $searchNode->nodeValue;
echo "$label - $value<br>";
}
输出:
asd 480p - ValueIwant
720p - ValueIwant