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 这样做,而模式是它应该拆分字符串的是任何特殊字符,即非字母数字。
您必须像这样在正则表达式中添加定界符:
<?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);
我使用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 这样做,而模式是它应该拆分字符串的是任何特殊字符,即非字母数字。
您必须像这样在正则表达式中添加定界符:
<?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);