我们可以使用正则表达式从字符串中提取dyanmic数据吗?

时间:2015-09-08 08:37:51

标签: regex

我想使用正则表达式验证并获取以下标记的数据(9F03,9F02,9C): 9F02060000000060009F03070000000010009C0101

上面的字符串是Tag - length - value格式。

其中9F02,9F03,9C是标签并且具有固定长度,但它们在字符串中的位置和值可能会有所不同。

在标记之后,标记可以存储的值的长度为字节。

例如:

9F02 =标签

06 =以字节为单位的长度

000000006000 =值

谢谢,

Ashutosh说

2 个答案:

答案 0 :(得分:1)

标准正则表达式不知道如何计算得很好,它的行为就像状态机一样。

如果可能性的数量很小,你可以做什么表示正则表达式中的每种可能性,并为每个标记使用多个正则表达式查询...

/9F02(01..|02....|03......)/
/9C(01..|02....)/

......等等。

此处示例。

http://rubular.com/r/euHRxeTLqH

答案 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

我不确定你在这里提到的字节长度,但我想这段代码可以帮助你开始!