选择字符串中特定部分的数字

时间:2019-02-16 08:41:31

标签: php

我想在其他数字组之间选择数字。

我认为最好显示此模式以解释我的意思:

xxxxx...xxxxyyyyyyy....yyyyzzzzzzz....zzzz
{   1000   }               {     1500    }  

因此,从上面的字符串结构中,我想选择介于前1000位(xx)和最后1500位(zz)之间的数字。

我尝试了substr,但由于必须指定长度,因此它对我不起作用。因为我不知道这两个索引之间的长度。

这是我的代码:

$id = base64_encode($core->security(1070).$list["user_id"]);

$core->security创建的数字与输入的数字相同。 在此示例中,它创建了1070个随机数字的长度。

$decoded = base64_decode($id);
$homework_id = mysqli_real_escape_string($connection,substr($decoded, 1070));

我可以在一定长度的数字后选择数字。但是我想让他们在一系列数字之间

3 个答案:

答案 0 :(得分:0)

您可以使用regex来捕获10001500之间的数字

<?php
 $number = '10001212121212121500'; #make it string first
 if (preg_match('/1000(.*?)1500/', $number, $match) == 1) {
  echo (int)$match[1];
 }
?>

DEMO1: https://3v4l.org/pebul

DEMO2: https://3v4l.org/8TiWH

答案 1 :(得分:0)

  

我尝试了substr,但由于必须指定长度,因此它对我不起作用。因为我的长度不在1000到1500之间。

您可能会错过的substr功能。来自documentation

  

如果给定length并且为负数,则将从字符串末尾省略许多字符

这将起作用:

$left = 1000;  // Number of characters to be chopped off from the left side
$right = 1500; // Number of characters to be chopped off from the right side
$id = substr($id, $left, -$right) ?: "";

可以在?: ""部分将false转换为""。当字符串中没有足够的字符来切掉那么多字符时,substr将返回false。如果在这种情况下,您只想获取一个空字符串,那么?: ""会做到这一点。

答案 2 :(得分:0)

$text = <<<HEREDOC
xxxxx...xxxxyyyyyyy....yyyyzzzzzzz....zzzz
{   1000   }               {     1500    }
HEREDOC;

preg_match_all('/\{\s+(\d+)\s+\}/', $text, $matches);

var_dump($matches);

结果:

array(2) {
  [0]=>
  array(2) {
    [0]=>
    string(12) "{   1000   }"
    [1]=>
    string(15) "{     1500    }"
  }
  [1]=>
  array(2) {
    [0]=>
    string(4) "1000"
    [1]=>
    string(4) "1500"
  }
}