Android正则表达 - 信用卡跟踪

时间:2013-03-28 17:12:11

标签: android regex

我正在实现读卡器,我需要在android中使用正则表达式。在维基百科之后,track1的正则表达式是:

^%([A-Z])([0-9]{1,19})\^([^\^]{2,26})\^([0-9]{4}|\^)([0-9]{3}|\^)([^\?]+)\?$

在此尝试:http://www.regexplanet.com/advanced/java/index.html,其中包含以下示例: %B6011898748579348 ^ DOE / JOHN ^ 37829821000123456789? 它起作用但不适用于我。

String re = "%([A-Z])([0-9]{1,19})\\^([^\\^]{2,26})\\^([0-9]{4}|\\^)([0-9]{3}|\\^)([^\\?]+)\\?";
Pattern p = Pattern.compile(re);
String teste = "%B6011898748579348^DOE/ JOHN              ^37829821000123456789?";
Matcher m = p.matcher(teste);
    Log.d(TAG,"1111: "+m.groupCount());
int i=0;
for(i=0;i<m.groupCount();i++){
    try{
        Log.d(TAG, "GROUP"+Integer.toString(i)+" - "+m.group(i));
    }catch (IllegalStateException e){
    Log.d(TAG, e.toString());
    }
}

Teste与^和$和多行但没有工作:s 结果总是:

1111:6 java.lang.IllegalStateException:到目前为止没有成功匹配 java.lang.IllegalStateException:没有成功... ...

1 个答案:

答案 0 :(得分:1)

您需要先使用m.find()。你也应该迭代包括最后一组。试试这种方式

...
if(m.find()){
    Log.d(TAG,"1111: " + m.groupCount());

    //change '<' into '<=' to include group 6
    for(int i=0; i<=m.groupCount(); i++){ 
        try{
            Log.d(TAG, "GROUP"+Integer.toString(i)+" - "+m.group(i));
        }catch (IllegalStateException e){
            Log.d(TAG, e.toString());
        }
    }
}