函数调用的正则表达式模式

时间:2012-03-15 16:38:11

标签: java regex

我已经定义了以下模式来解析我们自己的自定义函数,它是:<functionName>[<arg1>, <arg2>, ..],模式是:
([a-zA-Z0-9]+)\\[(([a-zA-Z0-9]+)(,([a-zA-Z0-9])+)*?)*?\\]

现在,当我针对示例函数properCase[ARG1,ARG2]运行此函数时,我得到以下输出:

Total matches are: 5
Group number 0is: properCase[ARG1, ARG2]
Group number 1is: properCase
Group number 2is: ARG1
Group number 3is: ARG1
Group number 4is: ,ARG2

代码:

        Matcher m = funcPattern.matcher("properCase[ARG1, ARG2]");
        System.out.println("Match found: " + m.matches());
        System.out.println("Total matches are: " + m.groupCount());
        if (m.matches())
        {
            for (int index= 0 ; index < m.groupCount(); index++)
            {
                System.out.println("Group number "+ index + "is: " +m.group(index));
            }
        }

如何只提取函数名称(作为组1)和参数列表(作为组2,组3)?我无法消除群组中的,

2 个答案:

答案 0 :(得分:2)

我无法使用您提供的正则表达式来匹配properCase[ARG1, ARG2],但为了更一般地回答您的问题,您应该使用非捕获组(?:your_regex)不将其包含在匹配器组中< / p>

修改

如果您没有使用单个正则表达式进行解析,请考虑以下事项:将字符串拆分为函数名称和参数组,然后用分隔符拆分参数组,

import java.util.regex.*
String regex="([a-zA-Z0-9]+)\\[([ ,.a-zA-Z0-9]+)\\]"
Pattern funcPattern = Pattern.compile(regex);
Matcher m = funcPattern.matcher("properCase[ARG1, ARG2, class.otherArg]");
        System.out.println("Match found: " + m.matches());
        System.out.println("Total matches are: " + m.groupCount());
        if (m.matches())
        {
            for (int index= 0 ; index <= m.groupCount(); index++)
            {
                System.out.println("Group number "+ index + "is: " +m.group(index));
            }
        }
println "Arguments: " + m.group(2).split(",");

产地:

Match found: true
Total matches are: 2
Group number 0is: properCase[ARG1, ARG2, class.otherArg]
Group number 1is: properCase
Group number 2is: ARG1, ARG2, class.otherArg
Arguments: [ARG1,  ARG2,  class.otherArg]

答案 1 :(得分:1)

将逗号括在其自己的组中以解决它。

([a-zA-Z0-9]+)\\[(([a-zA-Z0-9]+)(,)(([a-zA-Z0-9])+)*?)*?\\]