【问题标题】:preg_match_all(): raw ASCII hex matchingpreg_match_all():原始 ASCII 十六进制匹配
【发布时间】:2013-04-05 11:44:45
【问题描述】:

我正在尝试为 ASCII 字符的十六进制表示的原始形式找到一种模式。示例输入如下所示(包括撇号):

'\x61\x62\x63\x87\x72\x52'

'\x61\x62\x63\x64\x61\x42\x93\x3a'

问题是,\x61\x62\x63 总是一样的。我尝试了许多不同的模式,例如:

'/\'\\x61\\x62\\x63(.+)\'/i'

'/\'\x61\x62\x63(.+)\'/i'

以及(.+) 的各种替代品,但我无法使其正常工作。

如果有人能帮我解决这个问题,我将不胜感激。

PS。请注意,input 包含 ASCII 字符的十六进制表示

【问题讨论】:

  • 它怎么不正常工作?你得到了什么?你期待什么?

标签: php regex ascii preg-match-all hex


【解决方案1】:

要在 PHP 字符串中包含单个 \,您需要使用 \\,而要在正则表达式中包含单个 \,您需要使用 \\。结合这些要求和 PHP 正则表达式中的单个反斜杠将看起来像 \\\\。请尝试以下操作:

$pattern = "/'\\\\x61\\\\x62\\\\x63(.+)'/i";

例如:

preg_match_all($pattern, "'\\x61\\x62\\x63\\x64\\x61\\x42\\x93\\x3a'", $matches);
print_r($matches);

输出:

Array
(
    [0] => Array
        (
            [0] => '\x61\x62\x63\x64\x61\x42\x93\x3a'
        )

    [1] => Array
        (
            [0] => \x64\x61\x42\x93\x3a
        )

)

ideone:http://ideone.com/RIDa64

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-09
    • 2015-08-23
    • 2012-10-02
    • 2011-08-02
    • 1970-01-01
    • 2015-05-07
    • 2012-10-01
    • 2012-11-14
    相关资源
    最近更新 更多