2012-02-20 2 views
0

Я пытаюсь написать скрипт для очистки страницы, чтобы взять валюту сайта. Мне нужна помощь в написании регулярного выражения.регулярное выражение для очистки страницы

Вот что у меня есть.

<?php 

function converter(){ 
     // Create DOM from URL or file 
     $html = file_get_contents("http://www.bloomberg.com/personal- finance/calculators/currency-converter/"); 

    // Find currencies. (using h1 to test) 
     preg_match('/<h1>(.*)<\/h1>/i', $html, $title); 
     $title_out = $title[1]; 
     echo $title_out; 

} 

$foo = converter(); 
echo $foo; 



?> 

Здесь, где валюты хранятся на сайте Bloomberg.

сайт: http://www.bloomberg.com/personal-finance/calculators/currency-converter/

//<![CDATA[ 
     var test_obj = new Object(); 
     var price = new Object(); 
       price['ADP:CUR'] = 125.376; 

Что бы выражение выглядеть, чтобы получить эту скорость? Любая помощь будет большой!

+0

Не следует использовать регулярные выражения для разбора HTML-код;) – m0skit0

+1

В случае использования, что является приемлемым. –

+0

Возможный дубликат [Как разобрать HTML с PHP?] (Http://stackoverflow.com/questions/3650125/how-to-parse-html-with-php) – Gordon

ответ

3

Это работает для меня - нужно ли быть более гибким? И нужно ли принимать различные пробелы - или это всегда одно место? (Вокруг знака равенства)

"/price\['ADP:CUR'\] = (\d+\.\d+/)" 

Использование:

if(preg_match("/price\['ADP:CUR'\] = (\d+\.\d+)/", $YOUR_HTML, $m)) { 
//Result is in $m[1] 
} else { 
//Not found 
} 
+0

Спасибо! Отлично. Как я смогу вернуть только значение? я бы просто разделил персонажей до этого? Также может Я положил var в регулярное выражение, так что, например, я хотел найти GBP вместо ADP. Я мог бы поставить «/ price \ ['$ this-> from: CUR' \] = \ d + \. \ D + /" – Will

+0

См. Мой обновленный ответ :) И да вы можете использовать переменные в регулярном выражении. – jack

+0

Танк ты !! @jack – Will

2

Это возвращает ассоциативный массив, идентичный объектов JavaScript на сайте Блумберг.

<?php 
$data = file_get_contents('http://www.bloomberg.com/personal-finance/calculators/currency-converter/'); 

$expression = '/price\\[\'(.*?)\'\\]\\s+=\\s+([+-]?\\d*\\.\\d+)(?![-+0-9\\.]);/'; 

preg_match_all($expression, $data, $matches); 

$array = array_combine($matches[1], $matches[2]); 

print_r($array); 

echo $array['ADP:CUR'];// string(7) "125.376" 
?> 
Смежные вопросы