0

我想使用正则表达式从字符串中找到特定的浮点数。
细绳

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

我需要找到这个的唯一数字 0.30 。我尝试了很多模式,但它们都返回字符串中的整个浮点数,其中一些根本不起作用

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

我也试过

floatval()

但它也不起作用

4

3 回答 3

3

试试这个:

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

它匹配一个带有小数点的数字,但前面$或后面都没有%

正则表达式

于 2013-06-29T01:51:30.897 回答
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
于 2013-06-29T01:48:44.703 回答
0

如果字符串格式是静态的(例如,它不会改变),那么为什么要使用正则表达式来查找它呢?

您正在寻找的字符串组件可以很容易地通过基于空格的字符串爆炸来定位,并且不费吹灰之力:

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

此外,如果您使用正则表达式,因此遇到您的代码的任何开发人员都将不得不花时间理解它——除非您将其记录好!

于 2013-06-29T01:55:52.627 回答