Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用php拆分字符串中的负值和正值?_Php_Regex - Fatal编程技术网

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

如何使用php拆分字符串中的负值和正值?,php,regex,Php,Regex,我在php中有一个字符串变量,看起来像“0+1.65+0.002-23.9”,我想在它们各自的值中拆分 例: 我尽量做到: $keys = preg_split("/^[+-]?\\d+(\\.\\d+)?$/", $data); 但不是我期望的工作 有人能帮我吗?事先非常感谢。像这样: $yourstring = "0+1.65+0.002-23.9"; $regex = '~\+|(?=-)~'; $splits = preg_split($regex, $yourstring); pri

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

例:

我尽量做到:

$keys = preg_split("/^[+-]?\\d+(\\.\\d+)?$/", $data);
但不是我期望的工作

有人能帮我吗?事先非常感谢。

像这样:

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

解释

  • 我们的正则表达式是
    +|(?=-)
    。我们将在任何匹配的问题上分歧
  • 它与
    +
    |
    匹配
  • 前瞻
    (?=-)
    匹配下一个字符为
    -
    的位置,允许我们保留
    -
  • 然后我们分手了
如果您决定还保留
+
字符,则选择2

(?=[+-])
这个正则表达式是一个断言下一个位置是加号或减号的前瞻。就我的审美观而言,这是一个很好的解决方案

输出(见:

参考

    • 你可以试试这个

      $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
      )
      

      回复:您的评论:原始值在字符串变量中,仅以正负符号分隔

      这给出了一个类似的答案,但有正确的输入和输出

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

      仅供参考:添加了实时php演示:)哇,太快了!!非常感谢。接受是有时间限制的。几分钟后我会做XD。重复,非常感谢。谢谢,戈帕!下次见。:)单个字段是否用空格或换行符分隔????我认为@AvinashRaj把这个问题和他的编辑混淆了!!!原始值在一个字符串变量中,只对正负符号进行分隔。这样,您就不需要加载正则表达式引擎,只需相当简单的一点文本操作,开销相当大。
      $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
      )
      
      $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
      )