2017-02-20 171 views
1

我無法找到合適的正則表達式來從字符串中僅提取浮點數。 考慮以下字符串:如何從包含整數的字符串中僅提取浮點數(小數)

$string = "8x2.1 3x2"; 

我想提取2.1,我嘗試以下,但是這給了我整形和浮點:

preg_match_all('/[0-9,]+(?:\.[0-9]*)?/', $string, $matches); 

然後我用is_float檢查浮動嘗試,但這樣也由於某種原因返回整數。有任何想法嗎? 謝謝

+1

你知道那是正則表達式的作品?這部分是什麼意思? '(?:\。[0-9] *)?' – Chris

+1

嘗試:'/ [0-9,] + \。[0-9] + /' – anubhava

+0

'$ matches'將包含字符串和'is_float( )'總是會返回'false'。 – AbraCadaver

回答

3

你的正則表達式匹配float和整數,甚至包含逗號的字符串。

  • [0-9,]+ - 1或多個數字或,
  • (?:\.[0-9]*)? - 的. +零或多個數字一個或零序列。

你需要

/\d+\.\d+/ 

,將匹配1+數字,.和1+數字。

或者,也匹配消極和積極的花車,添加可選-開頭:

/-?\d+\.\d+/ 

詳細

  • -? - 一個或零個連字符(?意味着匹配一個或零次出現
  • \d+ - o字面點(因爲在一個正則表達式的點是一個特殊的元字符,應當轉義來表示一個文字的點 - NE或多個數字
  • \.+裝置匹配一次或多次出現\d一個數字字符匹配) )
  • \d+ - 一個或多個數字

PHP demo

$string = "8x2.1 3x2"; 
preg_match_all('/\d+\.\d+/', $string, $matches); 
print_r($matches[0]); 
// => Array ([0] => 2.1) 

獎金正則表達式即會也匹配僅與可選的指數(在regular-expressions.info正則表達式的變體)的浮點數:

/[-+]?\d+\.\d+(?:e[-+]?\d+)?/i 

在這裏,你可以看到,一個可選的+-首先([-+]?)匹配,則該相同的圖案以上是使用的,然後是可選的非捕獲組(?:...)?匹配1點或0的出現以下序列組成:eE(因爲/i是不區分大小寫的調節劑),[-+]?匹配可選+-,和\ d +`匹配1+數字。

+0

非常感謝,你能解釋我的正則表達式嗎 –

+0

當然,我添加了細節。 –

+0

負浮球怎麼樣,你需要那些嗎?可能不考慮示例數據。 – AbraCadaver

6

考慮一個簡單的例子:

<?php 
$input = "8x2.1 3x2"; 
preg_match('/\d+\.\d+/', $input, $tokens); 
print_r($tokens); 

匹配「一個或多個數字,後面正好跟一個句號和又一個或多個數字」。

輸出顯然是:

Array 
(
    [0] => 2.1 
) 
+0

謝謝,我錯過了。當涉及到正則表達式時,我仍然是一個noob。 –

相關問題