我需要一個從£和£開始的整數值,我試着用regrex做,但我只獲得從£開始的值。如何獲得唯一的整數值從給定字符串的符號開始
在這裏我使用regrex像這樣。
if(preg_match('/(\£[0-9]+(\.[0-9]{2})?)/',$vals,$matches))
{
$main[]= str_replace('£','',$matches[0]);
}
我不熟悉regrex。所以請分享任何解決方案。任何幫助將高度appriciated.Thank你。
我需要一個從£和£開始的整數值,我試着用regrex做,但我只獲得從£開始的值。如何獲得唯一的整數值從給定字符串的符號開始
在這裏我使用regrex像這樣。
if(preg_match('/(\£[0-9]+(\.[0-9]{2})?)/',$vals,$matches))
{
$main[]= str_replace('£','',$matches[0]);
}
我不熟悉regrex。所以請分享任何解決方案。任何幫助將高度appriciated.Thank你。
從你的問題我知道,您有字符編碼的煩惱,所以首先我建議你解決這個問題發行一步之前,真的是重要的是儘早解決編碼問題。
回到問題,首先,爲了避免陷入更深入的字符集編碼地獄,我會建議你寫在十六進制正則表達式文字,因爲否則字符集編碼在其中保存您的PHP文件會影響結果。 I.E.如果你做這樣的事情:
preg_match('/(£|£)(\d+)', ...)
如果你保存你的源代碼在ISO-8859-1,這將匹配「£」和「£」(二進制),但它實際上匹配如果你選擇用UTF-8保存你的源代碼(這可能是一個好主意),「Â」和「ÂÂ」(二進制)。所以要小心這個,並驗證你的編輯器/ IDE正在做什麼!因此
我的建議是這樣說,這相當於爲ISO-8859-1和UTF-8寫:
preg_match('/(\xa3|\xc2\xa3)(\d+)', ...) // match "£" and "£"
此外,我建議儘量使用正規的子模式拍攝功能表達式,所以你不必str_replace()函數之後,這樣說道:
if (preg_match('/(?:\xa3|\xc2\xa3)([0-9]+(?:\.[0-9]{2})?)/', $data, $regp)) {
$main[] = $regp[1];
}
的「:」在後「(」意思是「這是一個子模式,但不抓住它「。
注意tha你也可以用preg_match_all替換preg_match,你會在$ regp [1]中找到已經準備好的所有匹配數字的數組。
謝謝johnny它真的非常有幫助。 – jaw
嘗試這一修正的正則表達式:
(?:£|£)([0-9]+(\.[0-9]{2})?)
它應該做的伎倆。但是,由於: (。[0-9] {2}),它還會返回小數值。
,您可以將其刪除,並£之後將返回唯一的整數部分| A£
因此,你嘗試從符號中提取整數:£123或£231? – Cristian