hex — Как мы можем отделить строку только по ее начальным символам в переполнении стека

Я пытаюсь отделить очень длинную строку, начальный тег которой 2424 …
Это функция, где это делает

protected function StartTagCheckAndNeglect($hex)
{
try {

$token = strtok($hex, "2424");

while ($token !== false) {
echo "$token<br>";
$token = strtok("(2424)");
}

} catch (Exception $e) {
echo $e->getMessage();
}

}

$ hex имеет очень длинную шестнадцатеричную строку …ПРОБЛЕМА В вместо только разделяющей строки, которая начинается с 2424 …. она разделяет любую вещь, которая начинается с 2 или 4.
Пример: 24246778672552dd455
Дает: 4677867,
55,
дд,
55
То, что я хочу, это 6778672552dd455 в одной строке до следующих 2424. Любое лучшее решение будет полезно.

0

Решение

Простой способ будет использовать explode() с 2424 в качестве разделителя. Затем вы можете проверить, является ли первый элемент пустым (так что нет ничего до первых 2424) и существует ли более 1 элемента (используя count()) …

$test = "24246778672552dd4552424a123";

$results = explode("2424", $test);
if ( empty($results[0]) && count($results) > 1 )   {
//found
array_shift($results);   // Remove empty element
print_r($results);
}

выходы …

Array
(
[0] => 6778672552dd455
[1] => a123
)

Проблема с strtok() является то, что он будет разбивать строку на основе ЛЮБЫХ символов в вашей строке, поэтому он будет делиться на 2 или 4, а не 2424. Из руководства …

strtok () разбивает строку (str) на меньшие строки (токены), с
каждый токен отделяется любым символом от токена.

1

Другие решения

Вы могли бы просто использовать preg_split чтобы ваши данные были разбиты на массивы.

$hex = '24246778672552dd45524248763257490823508lale9794382';
$hexarray = preg_split("/(2424)/", $hex);
print_r($hexarray);

// expected result
// Array ( [0] => [1] => 6778672552dd455 [2] => 8763257490823508lale9794382 )
1

По вопросам рекламы [email protected]