Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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正则表达式_Java - Fatal编程技术网

如何为逗号分隔符列表创建java正则表达式

如何为逗号分隔符列表创建java正则表达式,java,Java,如何为逗号分隔符列表创建java正则表达式 (三) (3,6) (3、6) 我试过了,但不匹配: Pattern.compile("\\(\\S[,]+\\)") 如何从Matcher类中获取代码中的值“3”或“3”和“6”?Validation regex 为了清晰起见,您可以尝试这种元正则表达式方法: String pattern = "< part (?: , part )* >" .replace("<", "\\("

如何为逗号分隔符列表创建java正则表达式

(三) (3,6) (3、6)

我试过了,但不匹配:

Pattern.compile("\\(\\S[,]+\\)")
如何从Matcher类中获取代码中的值“3”或“3”和“6”?

Validation regex 为了清晰起见,您可以尝试这种元正则表达式方法:

    String pattern = 
        "< part (?: , part )* >"
            .replace("<", "\\(")
            .replace(">", "\\)")
            .replace(" ", "\\s*")
            .replace("part", "[^\\s*(,)]++");

    System.out.println(pattern);
    /*** this is the pattern
    \(\s*[^\s*(,)]+\s*(?:\s*,\s*[^\s*(,)]+\s*)*\s*\)
    ****/
这张照片是:

(1,3,6) = [1, 3, 6]
(x,y!,a+b=c) = [x, y!, a+b=c]
( 1,    3  , 6) = [1, 3, 6]
(1,3,6,) no match
(()) no match
(,) no match
() no match
(oh, my, god) = [oh, my, god]
(oh,,my,,god) no match
([],<>) = [[], <>]
(  !!  ,  ??  ,  ++  ) = [!!, ??, ++]
(1,3,6)=[1,3,6]
(x,y!,a+b=c)=[x,y!,a+b=c]
( 1,    3  , 6) = [1, 3, 6]
(1,3,6,)不匹配
(())没有对手
(,)没有对手
()没有对手
(哦,我的,上帝)=[哦,我的,上帝]
(哦,天哪)没有对手
([],) = [[], ]
(  !!  ,  ??  ,  ++  ) = [!!, ??, ++]
这将使用
String.split
在修剪括号后获得所有部分的
String[]

Validation regex 为了清晰起见,您可以尝试这种元正则表达式方法:

    String pattern = 
        "< part (?: , part )* >"
            .replace("<", "\\(")
            .replace(">", "\\)")
            .replace(" ", "\\s*")
            .replace("part", "[^\\s*(,)]++");

    System.out.println(pattern);
    /*** this is the pattern
    \(\s*[^\s*(,)]+\s*(?:\s*,\s*[^\s*(,)]+\s*)*\s*\)
    ****/
这张照片是:

(1,3,6) = [1, 3, 6]
(x,y!,a+b=c) = [x, y!, a+b=c]
( 1,    3  , 6) = [1, 3, 6]
(1,3,6,) no match
(()) no match
(,) no match
() no match
(oh, my, god) = [oh, my, god]
(oh,,my,,god) no match
([],<>) = [[], <>]
(  !!  ,  ??  ,  ++  ) = [!!, ??, ++]
(1,3,6)=[1,3,6]
(x,y!,a+b=c)=[x,y!,a+b=c]
( 1,    3  , 6) = [1, 3, 6]
(1,3,6,)不匹配
(())没有对手
(,)没有对手
()没有对手
(哦,我的,上帝)=[哦,我的,上帝]
(哦,天哪)没有对手
([],) = [[], ]
(  !!  ,  ??  ,  ++  ) = [!!, ??, ++]

这使用
String.split
在修剪括号后获得所有部分的
String[]

我不清楚您的输入到底是什么样子,但我怀疑您使用的模式是否符合您的要求。您的模式将匹配一个文本
,后跟一个非空白字符,后跟一个或多个逗号,后跟一个文本

如果要匹配一个数字(可选后跟逗号和另一个数字,所有数字都用括号括起来),可以尝试以下模式:

"\\(\\s*(\\d+)\\s*(,\\d+)?\\s*\\)"
应该匹配
(3)
(3)
(3,6)
,等等,但不匹配
(a)
(3,a)


您可以使用
Matcher.group
检索匹配的数字;第一个数字将是group
1
,第二个(如果有)将是group
2

,我不清楚您的输入是什么样子的,但我怀疑您使用的模式是否符合您的要求。您的模式将匹配一个文本
,后跟一个非空白字符,后跟一个或多个逗号,后跟一个文本

如果要匹配一个数字(可选后跟逗号和另一个数字,所有数字都用括号括起来),可以尝试以下模式:

"\\(\\s*(\\d+)\\s*(,\\d+)?\\s*\\)"
应该匹配
(3)
(3)
(3,6)
,等等,但不匹配
(a)
(3,a)


您可以使用
Matcher.group
检索匹配的数字;第一个数字将是组
1
,第二个(如果有)将是组
2

对不起,你能为我澄清一下-这个列表是如何存储/输入的吗?您是在谈论上面提到的文字字符串:“(3)”或“(3,6)”或“(3,6)”,还是括号仅表示分隔符?如果您能提供Java代码来显示您试图匹配一个示例,这将非常有用。根据这些列表的存储/输入方式,您可以做一些简单得多的事情。对不起,您能为我澄清一下-这个列表是如何存储/输入的吗?您是在谈论上面提到的文字字符串:“(3)”或“(3,6)”或“(3,6)”,还是括号仅表示分隔符?如果您能提供Java代码来显示您试图匹配一个示例,这将非常有用。根据这些列表的存储/输入方式,您可能可以做一些简单得多的事情。我尝试了“\(\\s+(,\\s+*\)”。但是(1,3,6,)应该失败,但它没有。@michael:对不起,我错了。查看最新版本。我理解您所说的“即,一些开始括号,然后是一个部分,然后是零个或多个部分,前面是分隔符,然后是结束括号。”但是在“\([^\\s,]+(,[^\\s,]+)*\”中为什么有3',”?它应该只有1,对吗?@michael:
[…]
结构中的逗号是字符类定义的一部分。它是否定的,因为它是
[^…]
。总的来说,字符类匹配“除了空格和逗号以外的任何字符”。谢谢。我将正则表达式稍微修改为\([^,]+)(,[^,]+)*\)。但是我怎样才能得到价值呢?例如,如果我的输入是(1,3,6),我想解析出“1”、“3”、“6”。如果我的输入是(1),我想解析出“1”。我试过m.groupCount();,它总是返回“2”我尝试了“\(\\S+(,\\S+*)”。但是(1,3,6,)应该失败,但它没有。@michael:对不起,我错了。查看最新版本。我理解您所说的“即,一些开始括号,然后是一个部分,然后是零个或多个部分,前面是分隔符,然后是结束括号。”但是在“\([^\\s,]+(,[^\\s,]+)*\”中为什么有3',”?它应该只有1,对吗?@michael:
[…]
结构中的逗号是字符类定义的一部分。它是否定的,因为它是
[^…]
。总的来说,字符类匹配“除了空格和逗号以外的任何字符”。谢谢。我将正则表达式稍微修改为\([^,]+)(,[^,]+)*\)。但是我怎样才能得到价值呢?例如,如果我的输入是(1,3,6),我想解析出“1”、“3”、“6”。如果我的输入是(1),我想解析出“1”。我试过m.groupCount();,它总是给我返回“2”