2011-07-05 81 views
2

我在PHP中。我想在一個以貨幣符號開頭的句子中查找數字,然後返回數字。搜索「我在鞋上花了100歐元」並返回「100」。PHP的正則表達式來查找未編碼的歐元符號

我得到這個工作了$和£:

'/[$£]([0-9.]{1,})/' 

但添加了€歐元符號不起作用。 (這些句子來自解析的電子郵件,所以我不需要找到€);

preg_match_all('/[€]([0-9.]{1,})/', $sentence, $match); 

我發現因此繼: regex for currency (euro) 但它不編碼的歐元符號。

要編碼的歐元符號,我已經試過:

/[\x{20ac}]([0-9.]{1,})/u 
"[^-a-zA-Z0-9.:,!+£$ \\ ". chr(164) ."]" 

但不能弄明白。任何幫助?

+1

我想你想的'u'修改,以使UTF-8的模式請訪問http:// WW w.php.net/manual/en/reference.pcre.pattern.modifiers.php – tjm

+0

您可能還想尋找代表歐元符號的實體 - '€'和'€' –

+0

@tjm添加/ u打破正則表達式:「編譯失敗:偏移量爲2的無效UTF-8字符串」 @ dev-null-dweller已編輯。我只有€因爲文本來自電子郵件和用戶輸入。我不更改€€ – Corey

回答

1

當我把這個在:

echo preg_match("#€[0-9]{1,}#", "€1")?1:0; 

我得到1,所以你可能不需要統一。但是,如果你想使用UTF-8,我發現這是在PHP文檔下的註釋。

function unichr($u) { 
    return mb_convert_encoding('&#' . intval($u) . ';', 'UTF-8', 'HTML-ENTITIES'); 
} 

要獲得歐元,請致電unichr(8364)。用它代替上面的歐元符號,你會很好。 (我覺得我應該注意:我測試既作爲Unicode版本:

preg_match("#".unichr(8364)."\s*([0-9]{1,})#u", unichr(8364). "1")?1:0; 

你可能想要做str_replace('€', unichr(8364), $str);第一...

PS你可能還需要允許空間和小數。: #€\s*([0-9]{1,}(\.?[0-9]{2}))#

+0

這一次,我把所有東西都變成了UTF-8。原來問題是進一步上游。謝謝! – Corey

-1

你怎麼樣換成別的東西如歐元符號:?

$str = 'I spent €100 on shoes.'; 
$tempStr = str_replace('€', '$', $str); 
//$tempStr now contains: I spent $100 on shoes. 

preg_match_all('/[€]([0-9.]{1,})/', $tempStr, $match); 
+0

用'''替換所有的''' - 你真的認爲'[]([0-9。] {1,})'能在它之後找到任何匹配嗎? –