2012-10-02 33 views
0

可能重複:
Matching Product Prices from an HTML text從HTML匹配的價格 - 正則表達式

我有一個字符串,它通常是,但並非總是如此,html頁面源

我想提取來自字符串內的定價。我知道這不是一門精確的科學,貨幣符號位置等的組合是無止境的,但比什麼都好。

例如字符串:

$string = 'the price is <tag>&#163;10.00</tag>'; 

於是,我開始用下面的正則表達式:

$price = preg_match('#(?:\$|\£|\€|\&pound;|\&\#163;)(\d+(?:\.\d+)?)#', $string); 

但當然這只是返回的第一個字符。

我的問題是,有沒有辦法通過$字符串直到找到某個字符?例如<還是空間?然後返回在這種情況下會發現什麼:10.00

這是做到這一點的一種可行方式還是有更好的方法?

下面是一個例子以上:

http://ideone.com/u8erb

+0

你有HTML源代碼和需要從你挑選價格是源? – GBD

+1

你是什麼意思,它只返回第一個字符?你甚至沒有檢查匹配 –

+0

@ExplosionPills這就是我的意思http://ideone.com/u8erb –

回答

0

閱讀文檔爲preg_match,它不返回你的對手,它只返回如果有一個匹配。

試試這個

$string = 'the price is <tag>&#163;10.00</tag>'; 

$price = preg_match_all('#(?:\$|\£|\€|\&pound;|\&\#163;)(\d+(?:\.\d+)?)#', $string, $matches); 

//This will contain your matches 
var_dump($matches); 
0

如何使用preg_match_all(\d+(?:\.\d+)?)(?=<\s*/\s*tag\s*>),因爲貨幣可能會改變?正則表達式的任何解決方案將取決於一組假設,所以這是很好的先把它們降低:

  • 你應該在哪裏看,這些價格是否在給定的分區內發生?
  • 可能值的完整集合是什麼?

儘量讓你的正則表達式儘可能廣泛,因爲它將來會失敗的一個常見原因是因爲未曾考慮的事情發生了輕微的變化。如果這些價格與IDS和類標籤出現,請考慮使用XHTML解析器來代替:

http://php.net/manual/en/book.dom.php

http://simplehtmldom.sourceforge.net/