我無法找到合適的正則表達式來從字符串中僅提取浮點數。 考慮以下字符串:如何從包含整數的字符串中僅提取浮點數(小數)
$string = "8x2.1 3x2";
我想提取2.1,我嘗試以下,但是這給了我整形和浮點:
preg_match_all('/[0-9,]+(?:\.[0-9]*)?/', $string, $matches);
然後我用is_float
檢查浮動嘗試,但這樣也由於某種原因返回整數。有任何想法嗎? 謝謝
我無法找到合適的正則表達式來從字符串中僅提取浮點數。 考慮以下字符串:如何從包含整數的字符串中僅提取浮點數(小數)
$string = "8x2.1 3x2";
我想提取2.1,我嘗試以下,但是這給了我整形和浮點:
preg_match_all('/[0-9,]+(?:\.[0-9]*)?/', $string, $matches);
然後我用is_float
檢查浮動嘗試,但這樣也由於某種原因返回整數。有任何想法嗎? 謝謝
你的正則表達式匹配float和整數,甚至包含逗號的字符串。
[0-9,]+
- 1或多個數字或,
(?:\.[0-9]*)?
- 的.
+零或多個數字一個或零序列。你需要
/\d+\.\d+/
,將匹配1+數字,.
和1+數字。
或者,也匹配消極和積極的花車,添加可選-
開頭:
/-?\d+\.\d+/
詳細
-?
- 一個或零個連字符(?
意味着匹配一個或零次出現)\d+
- o字面點(因爲在一個正則表達式的點是一個特殊的元字符,應當轉義來表示一個文字的點 - NE或多個數字\.
(+
裝置匹配一次或多次出現,\d
一個數字字符匹配) )\d+
- 一個或多個數字$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的出現以下序列組成:e
或E
(因爲/i
是不區分大小寫的調節劑),[-+]?
匹配可選+
或-
,和\ d +`匹配1+數字。
考慮一個簡單的例子:
<?php
$input = "8x2.1 3x2";
preg_match('/\d+\.\d+/', $input, $tokens);
print_r($tokens);
匹配「一個或多個數字,後面正好跟一個句號和又一個或多個數字」。
輸出顯然是:
Array
(
[0] => 2.1
)
謝謝,我錯過了。當涉及到正則表達式時,我仍然是一個noob。 –
你知道那是正則表達式的作品?這部分是什麼意思? '(?:\。[0-9] *)?' – Chris
嘗試:'/ [0-9,] + \。[0-9] + /' – anubhava
'$ matches'將包含字符串和'is_float( )'總是會返回'false'。 – AbraCadaver