preg_split()
此函数使用正则表达式来拆分字符串。
所以在这个例子中连续两个或多个0:
$arr = preg_split('/[0]{2,}/', $string);
print_r($arr);
echo PHP_EOL;
这将输出以下内容:
Array
(
[0] => a9059xbb
[1] => fc7a5f48a1a1b3f48e7dcb1f23a1ea24199af4d
[2] => 54368
)
请注意,如果消息本身包含00,您将遇到问题。假设它被用作“字符串结尾”的空字节,但这不会发生。
preg_match()
这是一个使用正则表达式的例子。您可以在任意点拆分。
$string = 'a9059xbb000000000000000000000000fc7a5f48a1a1b3f48e7dcb1f23a1ea24199af4d00000000000000000000000000000000000000000000000000000000000054368';
print_r($string);
echo PHP_EOL;
$res = preg_match('/(.{4})(.{32})(.{32})/', $string, $matches);
print_r($matches);
echo PHP_EOL;
这个输出:
a9059xbb000000000000000000000000fc7a5f48a1a1b3f48e7dcb1f23a1ea24199af4d00000000000000000000000000000000000000000000000000000000000054368
Array
(
[0] => a9059xbb000000000000000000000000fc7a5f48a1a1b3f48e7dcb1f23a1ea24199a
[1] => a905
[2] => 9xbb000000000000000000000000fc7a
[3] => 5f48a1a1b3f48e7dcb1f23a1ea24199a
)
如您所见,/(.{4})(.{32})(.{32})/ 将找到 4 个字节,然后是 32,然后又是 32。捕获组是使用 () 围绕您想要查找的内容创建的。它们出现在$matches 数组中(0 始终是找到的整个字符串)。
如果你想忽略某些部分,你也可以表达出来:
/(.{4})9x(.{32}).{4}(.{32})/
这会改变找到的字符串:
Array
(
[0] => a9059xbb000000000000000000000000fc7a5f48a1a1b3f48e7dcb1f23a1ea24199af4d000
[1] => a905
[2] => bb000000000000000000000000fc7a5f
[3] => a1b3f48e7dcb1f23a1ea24199af4d000
)
链接
上述函数的 PHP 文档:
https://www.php.net/manual/en/function.preg-split.php
https://www.php.net/manual/en/book.pcre.php
使用此演示试玩第二个正则表达式:
https://regex101.com/r/pfZtH8/1