假设我有一个字符串:$str=abcef7ha43HEX_STRING7sf6gHEX_STRING //"HEX_STRING "is any valid hex string
.
我需要在$str
中找到HEX_STRING
并将其替换为pack("H*",HEX_STRING)
的结果。我该怎么做呢?
你应该这样做:
$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;
在线regex演示|在线php演示
解释:
'{ # 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不想/有花括号{}
,所以这里有一个解决方案,检测每个十六进制字符并转换它:
$string = 'abcef7ha43207sf6g';
$new_string = preg_replace_callback('/[a-f0-9]{2}/i', function($m){
return pack("H*",$m[0]);
}, $string);
echo $new_string;