正则表达式匹配十六进制字符串

时间:2013-08-22 06:39:07

标签: php regex

我正在努力使用PHP正则表达式来匹配主字符串中的子字符串,但是有一些条件

子字符串应该:

  1. 字符串应该有7个连续的字节,其中最多(3个空字节)'000000',而不是单个??
  2. 喜欢例如:

    1. 输入字符串:4455330000002211223311223377885233
      匹配:22112233112233

    2. 输入字符串:441553300000022
      匹配:无(因为它有3个空字节)

    3. 输入字符串:112233000000005511220011
      匹配:无(因为它有3个空字节)

    4. 输入字符串:11??0000002255
      匹配:无(因为它中有3个空字节且其中有??

    5. 输入字符串:426F6D650000010001020000
      匹配:426F6D650000010001020(因为它最多有3个空字节和7个连续的非空字节

    6. 输入字符串:426F6D650000010001000000
      匹配:无(因为没有7个连续的非空字节)

    7. 正确匹配这些正确的正则表达式是什么?

2 个答案:

答案 0 :(得分:0)

您可以尝试使用此正则表达式:

preg_match("/^[a-f0-9]{1,}$/is",$str)

答案 1 :(得分:0)

不是说它是最好的解决方案,但是这样的事情也可以在没有REGEXP的情况下完成,以防它可以帮到你:

$str = explode ('??', $string);
if (count ($str) > 1) // It includes at least one '??'

$str = explode ('00', $string);
if (count ($str) > 4) // It includes more than 3 times the '00' pattern

foreach ($str as $sub_string) {
    if (count ($sub_string > 13)) // One of the sub_string between the '00' patterns contains 7 bytes as wanted
}

如果您稍后再回到代码中,则维护起来会变得更容易。