PHP 中的正则表达式返回的不是预期的


Regex in PHP returns not what expected

我是PHP新手,希望有人能帮忙。

有一个网站包含以下 HTML:

<span id="sell_usd_place">1.6640</span>

我的代码如下:

<?php
$data = file_get_contents('http://www.a_bank.com/currency-rates/');
$regex = "#<span id='"sell_usd_place'">(.*?)</span>#";
preg_match($regex,$data,$matchKapitalSell);
var_dump($matchKapitalSell);
echo $matchKapitalSell[0]."<br>";
echo $matchKapitalSell[1];
?>

我期望的是,在输出中我将得到: "<span id="sell_usd_place">1.6640</span>",因为它是我设置为模式的。

得到的是(我正在使用 XAMPP 来检查代码):

array(2) { [0]=> string(39) "1.6640" [1]=> string(6) "1.6640" } 1.6640
1.6640array(0) { }

谁能解释一下:

  1. 为什么我只得到"1.6640"而不是 <span id="sell_usd_place">1.6640</span>

  2. 上面输出中"字符串(39)"中的"39"是什么?

提前谢谢你!!

使用 DOM 而不是正则表达式。正则表达式不适合可靠地解析 HTML。

例:

$html = file_get_contents('http://www.a_bank.com/currency-rates/');
$doc = new DOMDocument();
$doc->loadHTML($html);
$span = $doc->getElementById('sell_usd_place');
$value = $span->nodeValue;
echo $value; # 1.6640