Matcher是否显示正则表达式匹配的位置?

时间:2014-03-29 00:53:38

标签: java regex adif

我有一个我正在解析的文件格式,称为ADIF格式。它可能看起来像这样:

<BAND:3>15M   <MODE:4>JT65

对于每组,我需要从中检索2条信息。标签位于&lt;&gt;内部,数据位于外部。 :后面的数字表示>后要读取的字符数。

我正在尝试通过正则表达式执行此操作,使用类似这样的内容:

String tag=m.group();
String tagName=(String) tag.subSequence(1,tag.length()-1);
int cI=tag.indexOf(':');
String data="";
if (cI!=-1) {
    tagName=(String) tag.subSequence(1,cI);
    int numChar=Integer.parseInt((String) tag.subSequence(cI+1,tag.length()-1));
    int end=m.regionEnd()+1;
    data = (String) line.subSequence(end,end+numChar-1);
}

问题是Matcher定义的Region覆盖整行。有没有办法找到匹配发生的字符?

1 个答案:

答案 0 :(得分:1)

在发布后立即想出来......叹息。

使用end()功能,而不是regionEnd()

int end=m.end();

这就是最终的代码:

String tag=m.group();
String tagName=(String) tag.subSequence(1,tag.length()-1);
int cI=tag.indexOf(':');
String data="";
if (cI!=-1) {
    tagName=(String) tag.subSequence(1,cI);
    int numChar=Integer.parseInt((String) tag.subSequence(cI+1,tag.length()-1));
    int end=m.end();
    data = (String) line.subSequence(end,end+numChar);
}