Rat2good
Rat2good

Reputation: 119

Regex in PHP returns not what expected

I am PHP newbie and I hope somebody can help.

There is a site which contains following HTML:

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

My code is below:

<?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];
?>

What I expect is that in the output I will get: "<span id="sell_usd_place">1.6640</span>" as it is what I set as a pattern.

Bit what I get is (I am using XAMPP to check the code):

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

Could anybody explain please:

  1. Why I get "1.6640" only and not <span id="sell_usd_place">1.6640</span>

  2. What is "39" in "string(39)" in above output?

Thank you in advance!!!

Upvotes: 1

Views: 51

Answers (1)

hek2mgl
hek2mgl

Reputation: 157947

Use DOM instead of a regex. Regular expressions aren't fitted to reliably parse HTML.

Example:

$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

Upvotes: 3

Related Questions