使用正则表达式匹配十六进制字符串中的hex字节

时间:2013-09-11 05:47:26

标签: java regex

我所拥有的是一个表示十六进制数的输入字符串,例如:

E3E4E5E64E

我想使用正则表达式测试它,是否存在某个十六进制字节 在此十六进制字符串表示的数字中,例如:4E

当我尝试简单地匹配4E时,我在字符串末尾的正确4E字节和不形成字节的不正确4E,但它只是E4的最后一位数字 和E5的第一位数。

是否可以编写正则表达式来操作字符对?

5 个答案:

答案 0 :(得分:1)

/([A-Fa-f0-9]{2})/g

我猜你想要每2个十六进制字符。

http://www.regex101.com/r/nO5qL2

修改

好的,我现在明白你想要的是什么,你想在最后匹配4E,但不是像E4E5中的4E那样出现。 这里是: /^([A-Fa-f0-9]{2})*(4E)/ 第一组匹配0,2,4,... 2n个字符然后它将匹配4E组(4E不是必需的组,但更容易提取它)。 例: http://www.regex101.com/r/iQ7uX4

当然,你可以用你想要的任何东西替换4E。 在RegExp结束时,Java RegExp可能需要。*,我现在无法测试。

答案 1 :(得分:1)

你可以试试这个正则表达式:

4E(?=(?:..)*$)

here on Regexr

(?=(?:..)*$)lookahead assertion。仅当此断言为真时才匹配4E。如果只有2个字符(?:..)*的倍数直到结尾(由anchor $确定),则此断言为真。

答案 2 :(得分:1)

试一试

/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
   public static void main (String[] args) throws java.lang.Exception
   {
       //Input String
       String str = "4EE4E5E64E";
       String splitArray,pattern="4E";

       //Convert into json Array
       splitArray=Arrays.toString(str.split("(?<=\\G.{2})"));

       //Split based on ","
       String[] tempArray = splitArray.split(",");

       for(int i=0;i<tempArray.length;i++)
       {
           String compareString=tempArray[i];

           //Remove whitespaces
           compareString=compareString.replaceAll("\\s+","");
           if(i==0||(i==tempArray.length-1))
           {
               if(i==0)
               {
                    compareString=compareString.substring(1,3);
               }else
               {
                    compareString=compareString.substring(0,2);
               }
           }  

           //Compare with pattern string If yes goes inside
           if(compareString.equalsIgnoreCase(pattern))
           {
               System.out.println("Yes");   
           }
       }      
    }
}

您还可以使用JSONObject和JSONArray类来分割数组并与模式字符串进行比较。

答案 3 :(得分:0)

正则表达式非常有限。他们不能“理解”上下文。

有关详细信息,请参阅:

因此,使用标准正则表达式,无法区分4E代表两个十六进制数E4E5和一个形成十六进制字节4E

然而,没有什么能迫使你依赖正则表达式了!例如,如果您知道您的字符串仅包含十六进制字符串,则只能接受从偶数位置索引开始的正则表达式产生的那些匹配。

答案 4 :(得分:0)

我猜正则表达式:([4E] {2})可以很适合你...... !!