我所拥有的是一个代表十六进制数字的输入字符串,例如:
E3E4E5E64E
我想使用正则表达式对其进行测试,以确定此十六进制字符串表示的数字中是否存在某些十六进制字节,例如:4E
。
当我试图简单地匹配4E
时,我4E
在字符串末尾同时击中了正确的字节和不正确4E
的不形成字节的字节,而只是 的最后一个数字E4
和第一个数字E5
。
是否可以编写正则表达式来对字符对进行操作?
/([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 的末尾,我现在无法测试。
试试看
/* 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 类来拆分数组并与模式字符串进行比较。
我猜正则表达式: ([4E]{2}) 很适合你...!!