gpt4 book ai didi

Java RegEx - 匹配参数列表

转载 作者:行者123 更新时间:2023-12-01 09:35:47 25 4
gpt4 key购买 nike

我正在使用正则表达式编写自定义解析器,但我不知道如何匹配函数。

我的自定义语言的函数示例是:

function int add(int num1, int num2){
return num1 + num2;
}

我的标记生成器使用 RegEx 获取下一个标记并将其从之前提供的源代码字符串中删除。这意味着在解析函数时,我可以确定代码将从函数语句开始。我目前有以下表达式:

^([\s]*function[\s]+[a-zA-Z][a-zA-Z0-9]*[\s]+[a-zA-Z][a-zA-Z0-9]*[\s]*\(([\s]*[a-zA-Z][a-zA-Z0-9]*[\s]+[a-zA-Z][a-zA-Z0-9]*[\s]*)*\)[\s]*\{.*\}.*)$

虽然很长,但是成功匹配了这两个函数:

function void log(string msg){
Console.log(msg);
}

function int add(int num1 int num2){
return num1 + num2;
}

我希望能够用逗号分隔参数。

  • 我可以在参数后面添加逗号,但最后一个参数以逗号结尾。

  • 我可以在参数后将逗号设置为可选,但用户将无法在其中添加逗号。

我需要能够只要求参数之间有逗号,否则稍后会弄乱我的解析器。如何编辑表达式以查找参数之间的逗号?

非常感谢您抽出时间。

最佳答案

此正则表达式应适用于字符串的 (int num1, int num2) 部分:

(\((?:\s*[^\s,]+\s+[^\s,]+\s*,)*\s*[^\s,]+\s+[^\s,]+\s*\))

将其间隔开会更容易阅读:

(\(
(?: \s*
[^\s,]+\s+
[^\s,]+\s*,
)* \s*
[^\s,]+\s+
[^\s,]+\s*
\))

关于Java RegEx - 匹配参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38947698/

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