PHP正则表达式匹配以获得十进制数

时间:2014-05-22 16:37:29

标签: php regex

我一直在使用正则表达式,如下所示。我的目标是从字符串中提取一次小数点数,如8.4。我使用的代码是:

$reg = "/[0-9]+[ ]+([0-9]\.[0-9])/";
preg_match_all($reg, $buffer, $matches);

对于像

这样的输入
0000001222   86257   8.4

我将数组$匹配为:

Array
(
    [0] => Array
        (
            [0] => 86257   8.4
        )

    [1] => Array
        (
            [0] => 8.4
        )

)

为什么模式匹配2次?我希望我的匹配数组如下:

Array
(
    [0] => 8.4
)

2 个答案:

答案 0 :(得分:0)

正则表达式中的匹配#0(几乎)始终是整个匹配的字符串。在您的情况下,因为您正在使用括号(capture group),所以您告诉表达式也捕获匹配字符串的子集。从匹配#1开始返回捕获组。

如果您明确不想捕获完整字符串,请考虑使用lookarounds;请注意,您需要稍微重构一下表达式,因为PHP lookbehinds中的外观需要为零宽度,因此不允许使用量词(+)。

答案 1 :(得分:0)

您应该检查manualPREG_PATTERN_ORDER是默认设置):

  

对结果进行排序,以便$ matches [0]是完整模式匹配的数组,$ matches [1]是由第一个带括号的子模式匹配的字符串数组,依此类推。

因此,在您的情况下,您想要的结果将始终位于$matches[1]