我找不到合适的正则表达式来从字符串中仅提取浮点数。 请考虑以下字符串:
$string = "8x2.1 3x2";
我想提取2.1,我尝试了以下但是这给了我整数和浮点数:
preg_match_all('/[0-9,]+(?:\.[0-9]*)?/', $string, $matches);
然后我尝试使用is_float
检查浮点数,但由于某种原因,这也会返回整数。有任何想法吗?
感谢
答案 0 :(得分:6)
考虑这个简单的例子:
List<List<Integer>> columns = new ArrayList<>();
匹配“一个或多个数字,然后恰好一个句号,再一个或多个数字”。
输出显然是:
<?php
$input = "8x2.1 3x2";
preg_match('/\d+\.\d+/', $input, $tokens);
print_r($tokens);
答案 1 :(得分:3)
你的正则表达式匹配浮点数和整数,甚至是只包含逗号的字符串。
[0-9,]+
- 一位或多位数或,
(?:\.[0-9]*)?
- .
+零个或多个数字的一个或零个序列。你需要
/\d+\.\d+/
这将匹配1位数,.
和1位数。
或者,为了匹配负片和正片,请在开头添加一个可选的-
:
/-?\d+\.\d+/
<强>详情
-?
- 一个或零个连字符(?
表示匹配一个或零个匹配)\d+
- 一个或多个数字(+
表示匹配一个或多个匹配项,\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
是不区分大小写的修饰符),[-+]?
匹配可选{ {1}}或+
,\ d +`匹配1位数。