我在php中有一个字符串变量,看起来像" 0+1.65+0.002-23.9
",我想分割它们各自的值。
例如:
0
1.65
0.002
-23.9
我尝试用:
$keys = preg_split("/^[+-]?\\d+(\\.\\d+)?$/", $data);
但不是我预期的工作。
任何人都可以帮助我吗?非常感谢。
答案 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
)