Java 正则表达式匹配a-字母数字&;b位数字和;c数字
我对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 声明:a-字母数字、b-数字和c-数字 可能的匹配示例:1)a-90485jlkerj和b-34534和c-643546 2) A-RT7456ffgt&B-86763454&C-684241 用例:首先,我必须根据正则表达式验证输入字符串。如果输入字符串匹配,则必须提取a值、b值和c值,如Java 正则表达式匹配a-字母数字&;b位数字和;c数字,java,regex,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 声明:a-字母数字、b-数字和c-数字 可能
分别为90485jlkerj、34534和643546 有人能告诉我如何以最好的方式做到这一点吗
我真的很感谢你在这方面的帮助 您可以使用此模式:
^(?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
两种模式中的括号是捕获组(捕获您想要的内容)您可以使用此模式:
^(?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
两种模式中的括号是捕获组(捕获您想要的内容)给定格式为
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组,但需要大量代码才能得到字符串,如上所示是不必要的。给定格式为
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组,但需要大量代码才能获得字符串,如上所示是不必要的。以下代码将帮助您:
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()));
}
}
}
}
以下代码将帮助您:
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()));
}
}
}
}
与其让人们为您编写正则表达式,不如阅读Java正则表达式教程。与其让人们为您编写正则表达式,不如阅读Java正则表达式教程+但是为什么是所有格量词呢?这里不可能出现灾难性的回溯。+1,但是为什么要使用所有格量词呢?这里不可能发生灾难性的回溯。谢谢。这个答案非常适合我,谢谢。这个答案非常适合我的用例