【问题标题】:How can we separate string by only its starting characters in PHP我们如何在 PHP 中仅通过字符串的起始字符来分隔字符串
【发布时间】:2018-10-16 14:08:32
【问题描述】:

我正在尝试分隔一个很长的字符串,其起始标记为 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, dd, 55 我想要的是一个字符串中的 6778672552dd455,直到下一个 2424。任何更好的解决方案都会有所帮助。

【问题讨论】:

  • 你可以将它们拆分,然后循环遍历数组并将它们放在一起,只是没有id 0
  • 不,如果我这样做的话,单曲 2 和 4 将与开始的 2424 一起被错过......我只希望错过 2424,它们在开始时一起出现,而不是单曲 2 和 4

标签: php hex explode strtok


【解决方案1】:

一个简单的方法是使用 explode() 和 2424 作为分隔符。然后您可以检查第一个元素是否为空(因此在第一个 2424 之前没有任何内容)并且有多个元素(使用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) 拆分为更小的字符串 (tokens),其中 每个标记由标记中的任何字符分隔。

【讨论】:

  • 这也是我测试过的正确答案..谢谢
  • 其实这是正确的答案,我太笨了:'(
【解决方案2】:

您可以使用preg_split 将数据拆分为数组。

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

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

【讨论】:

  • 另外,请注意,根据 PHP 文档,如果速度是一个问题,explode() 会更快。 $hexarray = explode("2424", $hex);secure.php.net/manual/en/function.preg-split.php
  • 是的,你是对的,因为即使在我认为是正确的 preg_split 之后,数据的长度也没有正确获取,但爆炸解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 2012-07-31
  • 2013-03-03
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
相关资源
最近更新 更多