2

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

                 语句:a-alphanumeric&b-digits&c-digits
可能的匹配示例:1) a-90485jlkerj&b-34534534&c-643546
                            2) A-RT7456ffgt&B-86763454&C-684241

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

有人可以分享我如何以最好的方式实现这一目标吗?

我真的很感谢你在这方面的帮助。

4

3 回答 3

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

两种模式中的括号是捕获组(捕获你想要的)

于 2013-06-24T02:23:28.687 回答
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 组中,但是您需要大量代码来获取字符串,如上所示,这不是必需的。

于 2013-06-24T02:47:27.350 回答
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()));
                    }
                }
            }
        }
于 2013-06-24T03:49:50.423 回答