Выбор цифр в определенном разделе внутри строки
Я хочу выбрать цифры между другими группами цифр.
Я думаю, что лучше показать этот шаблон, чтобы объяснить, что я имею в виду:
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