如何使用PHP拆分字符串中的负值和正值?

时间:2014-06-26 11:43:56

标签: php regex

我在php中有一个字符串变量,看起来像" 0+1.65+0.002-23.9",我想分割它们各自的值。

例如:

 0
1.65
0.002
-23.9

我尝试用:

$keys = preg_split("/^[+-]?\\d+(\\.\\d+)?$/", $data);

但不是我预期的工作。

任何人都可以帮助我吗?非常感谢。

2 个答案:

答案 0 :(得分:5)

像这样:

$yourstring = "0+1.65+0.002-23.9";
$regex = '~\+|(?=-)~';
$splits = preg_split($regex, $yourstring);
print_r($splits);

输出(见live php demo):

[0] => 0
[1] => 1.65
[2] => 0.002
[3] => -23.9

<强>解释

  • 我们的正则表达式为+|(?=-)。我们将拆分它匹配的任何内容
  • 匹配+,或| ...
  • 前瞻(?=-)匹配下一个字符为-的位置,允许我们保留-
  • 然后我们分手!

选项2,如果您决定要保留+字符

(?=[+-])

这个正则表达式是一个先行者,断言下一个位置是加号还是减号。对于我的美学感,它是一个非常好的解决方案。 :)

输出(请参阅online demo)

[0] => 0 
[1] => +1.65
[2] => +0.002
[3] => -23.9

<强>参考

答案 1 :(得分:4)

你可以试试这个

$data = ' 0 1.65 0.002 -23.9';
$t = str_replace( array(' ', ' -'), array(',',',-'), trim($data) );
$ta = explode(',', $t);

print_r($ta);

它为您提供了一个包含每个字段的数组,如下所示:

Array
(
    [0] => 0
    [1] => 1.65
    [2] => 0.002
    [3] => -23.9
)

RE:您的评论:原始值位于字符串变量中,仅针对正确或否定的符号分隔

$data = ' 0+1.65+0.002-23.9 ';

$t = str_replace( array('-', '+'), array(',-',',+'), trim($data) );
$ta = explode(',', $t);
print_r($ta);

给出了类似的答案,但输入和输出正确

Array
(
    [0] => 0
    [1] => +1.65
    [2] => +0.002
    [3] => -23.9
)