Выбор цифр в определенном разделе внутри строки

Я хочу выбрать цифры между другими группами цифр.

Я думаю, что лучше показать этот шаблон, чтобы объяснить, что я имею в виду:

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 ответа

Решение

Я старался substr но поскольку я должен указать длину, это не сработало для меня. Потому что у меня нет длины между 1000 и 1500 числами.

Есть особенность substr что вы могли пропустить. Из документации:

Если 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 когда в строке недостаточно символов, чтобы отрезать такое количество символов. Если в этом случае вы просто хотите получить пустую строку, то ?: "" сделаю именно это.

$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"
  }
}

Вы можете сделать это с помощью регулярного выражения, чтобы захватить числа, которые находятся между 1000 а также 1500

<?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

Другие вопросы по тегам