我应该如何 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
我有 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