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

How should I preg_match in correct format?

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

但它仅适用于我的第二个示例代码中的值

preg_match("'<File label=\"[(720)(576)(cat)(asd 480)].+>(.*)<\/File>'si", $streamdata, $streamurl);

如果您将 {1,50} 替换为大于 50 的数字或只是一个加号 (+),则您发布的正则表达式也应该有效。

您通常最好使用 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