PHP:获取所有<options>标记到数组的值

时间:2018-02-15 16:40:01

标签: php xpath preg-match

首先:抱歉,我只是在学习编码,所以这可能是一个简单的问题:)。

我要归档的是获取所有

的值
<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来选择它是否更好,但我也没有得到:(。

非常感谢任何帮助! :)

2 个答案:

答案 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。

对于您提供的数据,$resultarray,其中包含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"
}

Php demo output

替代正则表达式:

value="\K\d+(?=")匹配一个或多个数字d+

Php demo output