什么是解析像这样的PHP字符串最简单的方法

时间:2011-08-31 06:22:20

标签: php parsing

我尝试使用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解析而是字符串

3 个答案:

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