preg_match_all():原始ASCII十六进制匹配

时间:2013-04-12 20:05:51

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

我正在尝试找到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。请注意,输入包含ASCII字符的十六进制表示

1 个答案:

答案 0 :(得分: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