我想使用正则表达式验证并获取以下标记的数据(9F03,9F02,9C): 9F02060000000060009F03070000000010009C0101
上面的字符串是Tag - length - value格式。
其中9F02,9F03,9C是标签并且具有固定长度,但它们在字符串中的位置和值可能会有所不同。
在标记之后,标记可以存储的值的长度为字节。
例如:
9F02 =标签
06 =以字节为单位的长度
000000006000 =值
谢谢,
Ashutosh说
答案 0 :(得分:1)
标准正则表达式不知道如何计算得很好,它的行为就像状态机一样。
如果可能性的数量很小,你可以做什么表示正则表达式中的每种可能性,并为每个标记使用多个正则表达式查询...
/9F02(01..|02....|03......)/
/9C(01..|02....)/
......等等。
此处示例。
答案 1 :(得分:0)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegEx {
public static void main(String[] args) {
String s = "9F02060000000060009F03070000000010009C0101";
String regEx = "(9F02|9F03|9C)";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(s);
while(m.find()){
System.out.println("Tag : "+ m.group());
String length = s.substring(m.end(), m.end()+2);
System.out.println("Length : " + length);
int valueEndIndex = new Integer(m.end()) + 3 + new Integer(length);
String value = s.substring(m.end()+3,valueEndIndex);
System.out.println("Value : "+ value);
}
}
}
此代码将为您提供以下输出:
Tag : 9F02
Length : 06
value : 000000
Tag : 9F03
Length : 07
value : 0000000
Tag : 9C
Length : 01
value : 1
我不确定你在这里提到的字节长度,但我想这段代码可以帮助你开始!