2012-10-02 59 views
1

我正在嘗試一個簡單的正則表達式來處理價格信息的字符串,但我的preg_match_all根本找不到它應該做的。從HTML文本中匹配產品價格

我正在尋找例如$**.**£**.**或有時貨幣符號可能被編碼爲HTML實體,例如爲英鎊££

使用preg_match_all找到html實體有問題嗎?

這裏就是我想:

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

,但我得到:未知的修飾詞 '1'

+2

請不要downvote沒有評論請 - 這個問題有什麼問題? –

+2

您應該知道,在某些國家,貨幣符號是在價格之後。另請參閱正則表達式那裏:http://stackoverflow.com/questions/3517468/php-regular-expression-to-match-price-or-amount –

+0

@MarvinLabs - 嗨,是的,我知道這當然,崗位你顯示不正確的貨幣只是一個數字,被搜索的字符串也可能包含非貨幣的數字 –

回答

2

下面是一些明顯的錯誤:

1)preg_match_all()預計至少3參數,所以它必須是

preg_match_all(
    '#(?:\$|\£|\€|\£|\£)(\d+(?:\.\d+)?)#', 
    $string, 
    $matches 
); 

$matches變量將包含匹配的字符串。您的$price將包含模式匹配的次數。有關更多信息,請參閱http://php.net/preg_match_all

2)你有一個轉義符:

'#(?:\$|\£|\€|\£|\£)(\d+(?:\.\d+)?)#' 
^      ^    ^
Start     Unescaped   End 

修復這兩個問題將使code run without any parsing errors。它也應該回答你關於匹配實體的字面問題。

但是,我有些懷疑正則表達式實現了你正在嘗試做的事情。價格並不總是列出[CurrencySymbol][Amount]。例如,歐元通常寫爲100歐元或100歐元。所以你必須在符號和空白之前檢查數字。

+1

澄清問題戈登,謝謝 –

+0

要接受這個答案越多我認爲這個越多,我認爲這只是錯誤的無論如何都要這樣做!感謝您的幫助/建議,非常感謝。 –

+0

@DarrenSweeney歡迎您。 – Gordon