-1

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

E3E4E5E64E

我想使用正则表达式对其进行测试,以确定此十六进制字符串表示的数字中是否存在某些十六进制字节,例如:4E

当我试图简单地匹配4E时,我4E在字符串末尾同时击中了正确的字节和不正确4E的不形成字节的字节,而只是 的最后一个数字E4 和第一个数字E5

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

4

5 回答 5

2

/([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 替换为您想要的任何内容。Java RegExp 可能需要 .* 在 RegExp 的末尾,我现在无法测试。

于 2013-09-11T05:54:53.353 回答
1

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

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

在 Regexr 上查看

(?=(?:..)*$)是一个前瞻断言4E仅当此断言为真时才匹配。如果到最后只有 2 个字符的倍数(使用anchor(?:..)*确保),则此断言为真。 $

于 2013-09-11T06:26:01.233 回答
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 类来拆分数组并与模式字符串进行比较。

于 2013-09-11T07:47:55.160 回答
0

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

于 2013-09-11T08:31:35.433 回答
0

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

有关更多详细信息,请阅读:

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

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

于 2013-09-11T06:13:06.977 回答