2013-06-29 34 views
0

我想使用正則表達式從字符串中找到具體的浮點數。
查找字符串中的特定浮點數?

202-715-1278 2 0.01% 0.30 0.00% $0.00 0.00% 

我需要找到這個0.30的唯一編號。 我嘗試了很多的模式,但在字符串中所有的人都返回整個浮點數,其中一些它不工作的所有

[-+]?([0-9]*\,)?[0-9]+ 
\d+(?:\.\d+)? 

還我試圖

floatval() 

,但它不工作既不

+0

這是什麼模式?你是否總是想要第四個號碼?只有第二個是浮動數字? –

+0

即時通訊設法得到這一個0.30其中沒有%或$ –

+0

這仍然不清楚。第一個沒有%或$的數字是2.如果你想要總是0.30,只需要$ var = 0.30 –

回答

3

試試這個:

(?<!\$)\b[-+]?\d+\.\d+\b(?!%) 

這一個號碼相匹配,在這一個小數點,而不是由$之前或之後%

RegExr

+0

優秀謝謝:) –

1

你可以有空格包圍的數字(如果它是你在找什麼)有:

(?:^|\s)\K\d+(?:\.\d+)?(?=\s|$) 

解釋:

(?:^|\s) # the begining of the string or a white character 
\K   # reset all that is matched before 
\d+  # digit one or more times 
(?:\.\d+)? # optional dot and digits 
(?=\s|$) # followed by a white character or the end of the string 
+0

它不會返回任何東西:) http://rubular.com/r/A2gwavCxX8 –

+0

@ Dr.Neo:正常,rubular不是用於php的ruby。而紅寶石不支持'\ K'功能。請改用http://regex.larsolavtorvik.com/。 –

0

如果字符串格式是靜態的(例如,它不會改變),那麼爲什麼要使用正則表達式來找到它?

你正在尋找可以很容易地通過爆炸基於空間和很少的努力字符串位於字符串組成:

$string = "202-715-1278 2 0.01% 0.30 0.00% $0.00 0.00%"; 
$parts = explode(' ', $string); 
echo $parts[3]; // 0.30 

此外,如果您使用正則表達式,因此誰遇到任何開發商你的代碼將不得不花費時間去理解它 - 除非你把它記錄下來!