【问题标题】:PHP: Find valid hex in stringPHP:在字符串中查找有效的十六进制
【发布时间】:2013-05-24 01:49:50
【问题描述】:

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

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

【问题讨论】:

  • 但是,在那之前。你试过什么?
  • 我将其拆分为4个字符/部分,然后通过ctype_xdigit检查部分
  • 我对正则表达式一无所知,只是不知道十六进制的模式是什么样的。如果可以,请帮助我。
  • Check this out,使用preg_match()。更好的是preg_replace_callback()

标签: php hex


【解决方案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;

【讨论】:

  • 非常感谢!抱歉,我忘了告诉 "{""}" 不是我的字符串的一部分。我现在将编辑。对不起我的错误!
  • @quanganh_developer 你在开玩笑......无论如何你需要使用类似的东西。否则,如果我删除了大括号43{20},你怎么知道你是否想在这里转换43
  • 对不起!我打算从字符串的开头替换。无论43 还是32 都是十六进制的。如果它达到43 并且43 是十六进制,我将替换它。
  • @quanganh_developer 所以基本上任何看起来像十六进制的东西你想替换它?你知道你可能会有可怕的结果吗?
  • 感谢您的建议和帮助!:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-07
  • 2014-03-26
  • 2022-11-10
  • 2019-07-27
  • 2018-09-13
  • 2015-07-10
相关资源
最近更新 更多