得到字符串

问题描述:

Float值我有以下类型的字符串列表:得到字符串

 
27 km 
56.1 km 
45 KM 
96.2km 
87 k 

而且我想对每一个数值。正如你可以看到它们中的一些是浮点值,并且后缀“km”有时错误输入。我在寻找的输出如下:在网络上

 
27 
56.1 
45 
96.2 
87 

我发现正则表达式是字符串转换为数字,但他们没有考虑到某些值可以是浮动的,我怎么能写一个函数或找到满足我的要求的表达式?

+0

你尝试过'floatval()'吗? – Blake 2012-04-19 16:29:22

+0

事实上,我需要的,你应该发表你的评论作为答案 – 2012-04-19 16:43:11

+0

你已经选择了答案。没什么大不了的,除非你打算改用我的。哈。 – Blake 2012-04-19 16:47:37

$var = floatval($float);是你在找什么。

对于这些字符串,可以使用/^\d+(\.\d+)?/

浮点正则表达式:?? [ - +] [0-9] * \ [0-9] +

只是parseFloat()他们。 parseFloat()将以数字开头的字符串转换为数字并停止使用第一个非数字字符。

parseFloat('96.2 km') = 96.2

+1

这是JavaScript。 – jeremyharris 2012-04-19 16:31:02

+0

你说得对。 'floatval()'是php的等价物。一整天都在处理Javascript! – 2012-04-19 16:31:59

+0

我经常做同样的事情:) – jeremyharris 2012-04-19 16:34:12

无需正则表达式,只需使用floatval

$float = floatval($string); 

尝试。对我的作品

try {  
    Regex regexObj = new Regex(@"\b\d+(?:\.\d{0,}|)");  
    Match matchResults = regexObj.Match(subjectString);  
    while (matchResults.Success) {  
     // matched text: matchResults.Value  
     // match start: matchResults.Index  
     // match length: matchResults.Length  
     matchResults = matchResults.NextMatch();  
    }  
} catch (ArgumentException ex) {  
    // Syntax error in the regular expression  
} 

PHP方式

preg_match_all('/\b\d+(?:\.\d{0,}|)/', $subject, $result, PREG_PATTERN_ORDER); 
for ($i = 0; $i < count($result[0]); $i++) { 
    # Matched text = $result[0][$i]; 
}