preg_split 意外行为

preg_split unexpected behavior

我使用preg_split如下:

<?php
$num = 99.14;
$pat = "[^a-zA-Z0-9]";
$segments = preg_split($pat, $num);
print_r($segments);

我预计 $segments 会是一个像 array(99,14) 这样的数组,但是,它 returns array(99.14) 我不知道为什么 preg_split 这样做,而模式是它应该拆分字符串的是任何特殊字符,即非字母数字。

查看此演示:http://codepad.org/MUusnwis

您必须像这样在正则表达式中添加定界符:

<?php

    $num = 99.14;
    $pat = "/[^a-zA-Z0-9]/";
          //^------------^Delmimiter here
    $segments = preg_split($pat, $num);
    print_r($segments);

?>

输出:

Array ( [0] => 99 [1] => 14 )

编辑:

为什么 OP 将整个字符串返回到数组中的问题很简单!如果您在这里阅读手册:http://php.net/manual/en/function.preg-split.php

并在注释下快速引用:

Tip If matching fails, an array with a single element containing the input string will be returned.

如果只想按小数点拆分,也可以使用:

$array = explode('.', $num);

你也可以用T-Regx tool就不会出现这样的问题:)

不需要分隔符

<?php
$num = 99.14;
$segments = pattern("[^a-zA-Z0-9]")->split($num);

print_r($segments);