PHP:在字符串中查找有效的十六进制

时间:2013-05-24 01:49:50

标签: php hex

假设我有一个字符串:$str=abcef7ha43HEX_STRING7sf6gHEX_STRING //"HEX_STRING "is any valid hex string

我需要在HEX_STRING中找到$str并将其替换为pack("H*",HEX_STRING)的结果。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

所以这就是你如何做到的:

$string = 'abcef7ha43{20}7sf6g';
$new_string = preg_replace_callback('/\{((?:[a-f0-9]{2})+)\}/i', function($m){
    return pack("H*",$m[1]);
}, $string); // anonymous function requires PHP 5.3+
echo $new_string;

Online regex demo | Online php demo

<强>解释

\{ # Start with {
    ( # Group \1
        (?: # Ignore this group
            [a-f0-9]{2} # abcdef0123456789 two times = HEX
        )+ # Repeat 1 or more times
    )
\} #End with }
#and the i modifier for case insensitive matching

编辑: OP不希望/拥有花括号{},所以这是一个检测每个HEX字符并转换它的解决方案:

$string = 'abcef7ha43207sf6g';
$new_string = preg_replace_callback('/[a-f0-9]{2}/i', function($m){
    return pack("H*",$m[0]);
}, $string);
echo $new_string;