我应该如何以正确的格式preg_match?

时间:2015-09-19 09:32:03

标签: php formatting preg-match

我有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;

2 个答案:

答案 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