您不应该使用正则表达式来执行此操作。事实上,我什至不知道你会怎么做。您应该使用 HTML 解析器,end
从每个<a>
标签的href
属性中解析出参数parse_str()
,然后找到max()
它们,如下所示:
$doc = new DOMDocument;
$doc->loadHTML( $str); // All & should be encoded as &
$xpath = new DOMXPath( $doc);
$end_vals = array();
foreach( $xpath->query( '//div[@id="pages"]/a') as $a) {
parse_str( $a->getAttribute( 'href'), $params);
$end_vals[] = $params['end'];
}
echo max( $end_vals);
89
如本演示所示,将打印上面的内容。
请注意,这假定您的 HTML 实体已正确转义,否则DOMDocument
将发出警告。
您可以做的一种优化不是保留一个end
值数组,而是将看到的最大值与当前值进行比较。<a>
但是,这仅在标签数量变大时才有用。
编辑:正如 DaveRandom 指出的那样,如果我们可以假设<a>
拥有最高end
值的<a>
标签是该列表中的最后一个标签,仅仅由于分页链接的呈现方式,那么我们不需要迭代或保留列表其他end
值,如下例所示。
$doc = new DOMDocument;
$doc->loadHTML( $str);
$xpath = new DOMXPath( $doc);
parse_str( $xpath->evaluate( 'string(//div[@id="pages"]/a[last()]/@href)'), $params);
echo $params['end'];