gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:58:47 25 4
gpt4 key购买 nike

我定义了以下模式来解析我们自己的自定义函数:<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)?我无法消除 ,来自集团。

最佳答案

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

编辑:

如果您不习惯使用单个正则表达式进行解析,请考虑以下方法:将字符串拆分为函数名和参数组,然后按分隔符拆分参数组,

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]

关于java - 函数调用的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9724143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com