我尝试使用PHP来解析字符串以提取信息,部分内容看起来像这样
<div>All Versions:</div>
<div class='rating' role='img' tabindex='-1' aria-label='5 stars, 193984 Ratings'><div>
PHP中获取这两个数字的最简单方法是什么?
(1)恒星的数量 - 即5
(2)评级 - 即193984
P.S。请不要将其视为HTML解析而是字符串
答案 0 :(得分:1)
XML Parser爱好者会建议您使用解析器从div中获取属性。
$xml = new XMLReader(); //Setup parser
$xml->XML("<div>All Versions:</div><div class='rating' role='img' tabindex='-1' aria-label='5 stars, 193984 Ratings'></div>");
$xml->read();
while($xml->read()) { //Run through each node
if($xml->getAttribute('class') == 'rating') { //Look for class of 'rating'
// Break apart aria-label
list($stars, $ratings) = explode(', ', $xml->getAttribute('aria-label'));
$stars = intval($stars); //Grab the integer part of the strings
$ratings = intval($ratings);
break;
}
}
$xml->close();
但是,这取决于您希望如何识别div。如果您想要包含其他标识符(可能是更具体的标识符,例如id),您可以将它们包含在if语句中。
答案 1 :(得分:1)
一旦你隔离了这部分页面(无论是否解析DOM),你可以很容易地用以下方法提取这两个数字:
preg_match('#(\d+) stars, (\d+) Ratings#i', $source, $match);
list(, $stars, $ratings) = $match;
请注意,它适用于您的示例。如果在其他情况下存在其他人类可读属性,或者以不同方式排序,则需要例如在逗号上拆分字符串,然后分别搜索每个部分的星号或等级。
答案 2 :(得分:1)
$string="<div class='rating' role='img' tabindex='-1' aria-label='5 stars, 193984 Ratings'><div>"
$pattern = '/aria-label=\'(\d+) stars, (\d+) Ratings\'/';
preg_match($pattern, $string, $matches);
echo "<pre>";
print_r($matches);