首先:抱歉,我只是在学习编码,所以这可能是一个简单的问题:)。
我要归档的是获取所有
的值<HEAD>
<TITLE>Unauthorized</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unauthorized</H1>
<H2>Error 401</H2>
</BODY>
</HTML>
将html文档转换为数组。因此,对于上面的示例,只有“123”“412”等。如果它们只是数字,则会检查数组。
这就是我得到的:
<option value="123"></option>
<option value="412"></option>
我从中获得的是什么,因为$ result给我的结果如下:
$html = file_get_contents(url);
preg_match_all('/value="(\w+)"/', $html, $result);
var_dump($result);
$digits = array_filter($result, 'ctype_digit');
我知道我搞砸了那些正则表达式,但我不能正确。
然后我不确定使用XPath来选择它是否更好,但我也没有得到:(。
非常感谢任何帮助! :)
答案 0 :(得分:0)
感谢CD001和Kisaragi的暗示,我对此进行了管理。使用DOMDocument事情非常简单......有时人们认为太复杂......
$html = file_get_contents('url');
$dom = new DOMDocument;
$dom->loadHTML($html);
$options = $dom->getElementsByTagName('option');
$digits = array();
foreach ($options as $option) {
$valueID = $option->getAttribute('value');
array_push($digits, $valueID);
}
var_dump($digits);
答案 1 :(得分:0)
我的建议是不要使用正则表达式而是使用domparser。
对于您提供的数据,$result
是array
,其中包含2个数组。您的值位于第二个数组$result[1]
您可以将代码更新为:
preg_match_all('/value="(\w+)/', $html, $result);
$digits = array_filter($result[1], 'ctype_digit');
var_dump($digits);
那会给你:
array(2) {
[0]=>
string(3) "123"
[1]=>
string(3) "412"
}
替代正则表达式:
value="\K\d+(?=")
匹配一个或多个数字d+