Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式匹配a-字母数字&;b位数字和;c数字_Java_Regex - Fatal编程技术网

Java 正则表达式匹配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-数字 可能

我对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值,如
分别为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,但是为什么要使用所有格量词呢?这里不可能发生灾难性的回溯。谢谢。这个答案非常适合我,谢谢。这个答案非常适合我的用例