2012-11-30 58 views
0

我有一個preg_match_all模式來捕捉只有貨幣符號的數字,或者如果沒有符號,只是數字。但是,除了沒有符號的$符號之外,它會失敗(不返回任何錯誤)。Preg_match_all失敗

這裏就是我想:

include 'simple_html_dom.php'; 

$html = file_get_html($url); 

// Find price if added our code 
$ret = $html->find('.price'); 

$pattern = '/\p{Sc}\s*\d{1,3}(?:,\d{3})*(?:\.\d+)?/u'; 

以下是什麼可能由simple_html_dom以及他們是否工作或失敗返回的例子 - 它可能是以下

$ret[0] = '<span class="price">100</span>'; // this returns null 

$ret[0] = '<span class="price">£100</span>'; // this returns null 

$ret[0] = '<span class="price">€100</span>'; // this returns null 

$ret[0] = '<span class="price">$100</span>'; // this works correctly and returns $100 

preg_match_all($pattern, $ret[0], $matches); 

echo $matches[0][0]; 

ONE任何想法爲什麼?

+1

你似乎是使用DOM解析器......爲什麼以後使用正則表達式來解析HTML? –

回答

0

在您的代碼中,您將替換$ret var,不會將字符串放入數組中,因此只會在最後一個字符串上執行正則表達式匹配。如果您發佈的是您的代碼,那麼您應該製作$ret數組並添加字符串。 Here一切似乎都正常工作正則表達式!

編輯:
我現在看到的問題是,您要添加的一切$ret[0],您應該添加到$ret[0]第一,$ret[1]第二等,或者使用$ret[]=

+0

更新的問題與實際代碼 –

+0

如果這是您的實際代碼,請檢查我的更新答案。相反,如果您正在正確地管理陣列,我不知道 – Gabber

+0

已添加更多代碼 –