正则表达式匹配a-字母数字& b-digits& c-digits

时间:2013-06-24 02:14:48

标签: java regex

我有关于java正则表达式的查询。实际上,我是正则表达式的新手。 所以我需要帮助来形成以下声明的正则表达式:

                 Statement: a-alphanumeric&b-digits&c-digits
Possible matching Examples: 1) a-90485jlkerj&b-34534534&c-643546
                            2) A-RT7456ffgt&B-86763454&C-684241

用例:首先,我必须根据正则表达式验证输入字符串。如果输入字符串匹配,那么我必须提取值,b值和c值,如
分别为 90485jlkerj,34534534和643546

有人可以分享一下如何以最佳方式实现这一目标吗?

我真的很感谢你对此的帮助。

3 个答案:

答案 0 :(得分:2)

你可以使用这种模式:

^(?i)a-([0-9a-z]++)&b-([0-9]++)&c-([0-9]++)$

如果您尝试匹配的不是整个字符串,只需删除锚点:

(?i)a-([0-9a-z]++)&b-([0-9]++)&c-([0-9]++)

说明:

(?i)         make the pattern case-insensitive 
[0-9]++      digit one or more times (possessive)
[0-9a-z]++   the same with letters 

^   anchor for the string start
$   anchor for the string end

两种模式中的括号是捕获组(以捕获您想要的内容)

答案 1 :(得分:1)

给定格式为a-XXX&b-XXX&c-XXX的字符串,您可以在一个简单的行中提取所有XXX部分:

String[] parts = str.replaceAll("[abc]-", "").split("&");

parts将是一个包含3个元素的数组,是您想要的目标字符串。


匹配字符串的最简单的正则表达式是:

^(?i)a-([\\da-z]+)&b-(\\d+)&c-(\\d+)

将目标字符串放在第1组,第2组和第3组中,但是你需要大量的代码来获取字符串,如上所示,这不是必需的。

答案 2 :(得分:1)

以下代码可以帮助您:

String[] texts = new String[]{"a-90485jlkerj&b-34534534&c-643546", "A-RT7456ffgt&B-86763454&C-684241"};
Pattern full = Pattern.compile("^(?i)a-([\\da-z]+)&b-(\\d+)&c-(\\d+)");
Pattern patternA = Pattern.compile("(?i)([\\da-z]+)&[bc]");
Pattern patternB = Pattern.compile("(\\d+)");
for (String text : texts) {
            if (full.matcher(text).matches()) {
                for (String part : text.split("-")) {
                    Matcher m = patternA.matcher(part);
                    if (m.matches()) {
                        System.out.println(part.substring(m.start(), m.end()).split("&")[0]);
                    }
                    m = patternB.matcher(part);
                    if (m.matches()) {
                        System.out.println(part.substring(m.start(), m.end()));
                    }
                }
            }
        }