如何在php中使用正则表达式从html数据中获取一些值

问题描述 投票:1回答:3

我想从html中提取一些汽车制造数据。这是我要获取此信息的html数据。

我尝试了此代码,但是没有用

<?php

$data = "<select id="c1:swfield" name="c1">
<option value="--">&gt; All Makes</option>
<option value="1167">Acura</option>
<option value="1173">Alfa Romeo</option>
<option value="1564">Smart</option>
<option value="1836">Speranza</option>
<option value="1566">Ssang Yong</option>
</select>";


preg_match_all('|<select id=\"c1:swfield\" name=\"c1\">(.*?)</select>|s', $data, $matches);

print_r($matches);

?>

我正在获取一些空数组作为输出。

php regex preg-match-all
3个回答
1
投票

在这种情况下使用适当的DOM解析器有很多优点,包括知道要提取什么数据。

此代码使用DOMDocument和loadHTML()加载数据,然后使用XPath提取数据。

XPath可能很难开始,它使用//select[@id="c1:swfield"]/option分解为...

  • [//select-选择任何<select>元素。
  • [@id="c1:swfield"],其id属性为c1:swfield。这样可以指定从哪个<select>标签中提取数据。
  • [/option-在其中-提取<option>元素。

这就是该代码的工作方式...

$dom = new DOMDocument();
$dom->loadHTML($data, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

$xp = new DOMXPath($dom);
$makes = $xp->query('//select[@id="c1:swfield"]/option');
$makeList = [];
foreach ( $makes as $make ) {
    $makeList[] = $make->textContent;
}

print_r($makeList);

并给出(带有示例数据)...

Array
(
    [0] => > All Makes
    [1] => Acura
    [2] => Alfa Romeo
    [3] => Smart
    [4] => Speranza
    [5] => Ssang Yong
)

0
投票

您没有正确使用引号,请尝试使用以下代码

    <?php

    $data = '<select id="c1:swfield" name="c1">
    <option value="--">&gt; All Makes</option>
    <option>Acura</option>
    <option>Alfa Romeo</option>
    <option>Smart</option>
    <option>Speranza</option>
    <option>Ssang Yong</option>
    </select>';


    preg_match_all('|<select id=\"c1:swfield\" name=\"c1\">(.*?)</select>|s', $data, $matches);

    print_r($matches);

    ?>

0
投票

为了获得选项标签之间的值,您可以使用:

preg_match_all('|(?:<select id=\"c1:swfield\" name=\"c1\">.*?)?<option value=\"\d*?\">(.*?)<\/option>(?:<\/select>)?|s', $data, $matches);

Here是如何工作的。

© www.soinside.com 2019 - 2024. All rights reserved.