我有关于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 。
有人可以分享一下如何以最佳方式实现这一目标吗?
我真的很感谢你对此的帮助。
答案 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()));
}
}
}
}