2011-09-06 202 views
2

判断矩阵我怎么可以创建字符串,可能是简单的矩阵包含以下组合正则表达式 - 从字符串

123456 ABC  
123456AB1 
123456AB12 
123456AB123 
123456 

例如

if ("\\d + \\d + \\d + \\d + \\d + \\d 
    + \\s 
    + [a-zA-Z]+[a-zA-Z]+[a-zA-Z]") { 
    //passed variant from input in form 123456 ABC 

} else if ("\\d + \\d + \\d + \\d + \\d + \\d 
    + [a-zA-Z]+[a-zA-Z]+[a-zA-Z] 
    + \\d") { 
    //passed variant from input in form 123456AB1 

} else if ("\\d + \\d + \\d + \\d + \\d + \\d 
    + [a-zA-Z]+[a-zA-Z]+[a-zA-Z] 
    + \\d + \\d") { 
    //passed variant from input in form 123456AB12 

} else if ("\\d + \\d + \\d + \\d + \\d + \\d 
    + [a-zA-Z]+[a-zA-Z]+[a-zA-Z] 
    + \\d + \\d + \\d") { 
    //passed variant from input in form 123456AB123 

} else if ("\\d + \\d + \\d + \\d + \\d + \\d") { 
    //passed variant from input in form

} else { 
    //doesn't match 
} 
+1

你能给出什么不应该匹配的例子? – Thomas

+0

反对票是受欢迎的,也许我第一个不明白,例如这个线程的人http://stackoverflow.com/questions/7318469/java-recursive-repeated-deep-pattern-matching,:-) – mKorbel

回答

2

你可以例如使用以下regexs

123456 ABC -> \\d{6}\\s\\w{3} 
123456AB1 -> \\d{6}\\w{3} 
123456AB12 -> \\d{6}\\w{4} 
123456AB123 -> \\d{6}\\w{5} 
123456  -> \\d{6} 

if-clause可以用在你的例子中,例如,

if(str.matches("\\d{6}\\s\\w+") { 
    ... 
} ... 

就像你的问题一样,这些正则表达式变体只涵盖了这个例子的确切组合。

+0

现在是在正则表达式中清除+1 – mKorbel

1

如果您需要输入的字符串分裂成relevannt部分,试试这个正则表达式:(\d{6})\s*([a-zA-Z]*)(\d*)

对于123456AB123组1将123456,第2组是AB和第3组将123。 当群组丢失时,他们只是一个无用的字符串。

请注意,如果变体之间的唯一区别是组(组1总是存在,组2和3可能为空),那么if-else在不同的正则表达式中就不是必需的。相反,你可能有这样的东西(伪代码):

if(matches) { 
    groups[3] = extractGroups(); 

    //groups[0] should always exist 

    if(groups[1] is not empty) { 
    ... 
    } 

    if(groups[2] is not empty) { 
    ... 
    } 
} else { 
    handle non-match 
} 
+0

现在正在将正则表达式分组为+1清除+1 – mKorbel