1

我似乎遇到了 preg_match 代码的问题,我试图从一个应该类似于 '3.25' 的字符串中获取十进制数,但我得到的是 '1'

preg_match('/[0-9]+(?:\.[0-9]*)?/', '£3.25', $matches);
echo 'match: '.$matches[0];

打印“1”

4

3 回答 3

2
preg_match('#\d+(?:\.\d{1,2})?#', '£2.35', $match);
var_dump($match);

array(1) {
  [0]=>
  string(4) "2.35"
}

即使在 PHP 5.2 上:http ://codepad.viper-7.com/9nFhET

于 2012-04-29T11:15:43.920 回答
1

首先,您将在数组 ( $matches[1])的索引 1 处找到值

尝试这样的事情:

<?php
preg_match('/[0-9]+\.([0-9]+)/', '£3.25', $matches);
print_r($matches);
?>

这给出了:

Array
(
    [0] => £3.25
    [1] => 25
)
于 2012-04-29T11:08:05.273 回答
0

我可以在此测试仪站点上重现小数问题:http:
//www.pagecolumn.com/tool/pregtest.htm

如果将转义点替换为包含点的字符类,则它可以工作:

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

顺便说一句:你有没有可能得到点但后面没有数字?
如果不是,我会用预期的[0-9]*任何一个[0-9]+或特定数量的数字替换[0-9]{2}

于 2012-04-29T13:34:25.573 回答