例如,3串如下:如何從特殊字符串中獲取數字? PHP
@@7##
@@563##
@@120058##
我怎樣才能得到這樣的數字:
呼應第一個數字是7
呼應第二個數字是563
回聲第三個數字是120058
謝謝v很多!
例如,3串如下:如何從特殊字符串中獲取數字? PHP
@@7##
@@563##
@@120058##
我怎樣才能得到這樣的數字:
呼應第一個數字是7
呼應第二個數字是563
回聲第三個數字是120058
謝謝v很多!
$numberAsString = trim($string, '@#')
在這種情況下可能是最簡單和最快的。在這種情況下,輸出仍然是一個字符串,但在大多數情況下,這並不重要。如果它在你的情況下,你可以使用(int)
,(float)
或類似的來獲得它的正確類型。
當然,正則表達式也將是可能的,例如:
$didMatch = preg_match('/@+([^#]+)#+/', $string, $matches);
另一種可能性仍然首先在初始2 @
後提取剩餘的部分,然後澆鑄到一個數字,這似乎是總是INT IN這種情況下:
$number = (int)substr($string, 2);
還有另一種可能性是由字符個數去,只需使用SUBSTR,如:
$numberAsString = substr($string, 2, -2);
或者你也可以勇於創新,使用像爆炸+破滅+陣列功能:
$numberAsString = array_slice(explode('#', implode('', array_slice(explode('@', $string), 2))), 0, -2);
當然,這最後一個純粹是爲了表明它可以通過各種方式來完成,因爲它是非常低效和不切實際,但肯定有其他幾十種方式。
如果你在緊密的循環或性能真正重要的地方使用它,我會基準不同的可能性 - 在猜測中,我會說修剪或純子串解決方案將是最快的。
$str = "@@563##";
preg_match("|\d+|", $str, $res);
print_r($res);
只要撥打filter_var()
函數,它將返回唯一的數字。
無論輸入是什麼,它只會爲您過濾數字!
filter_var("@@120058##", FILTER_SANITIZE_NUMBER_INT) // return 120058
filter_var("*##20kkk", FILTER_SANITIZE_NUMBER_INT) // return 20
如果任何其他字符出現在字符串中,將會中斷 – 2014-08-28 08:11:40
是的,但答案仍然適合所有給出的示例。順便說一句。你的preg_match解決方案也會「打破」,如果他還想提取一個浮點數,我們不知道這個浮點數是否在給定的問題中,所以它真的歸結爲這種情況下的可用數據;) – griffin 2014-08-28 08:13:49