使用正则表达式查找函数的最佳方法

本文关键字:最佳 方法 函数 查找 正则表达式 | 更新日期: 2023-09-27 18:01:24

嘿,伙计们,我正在使用一种自定义脚本语言,我正在用c#为这种语言制作一种IDE。在这种语言中,函数定义如下:

yourfunctionhere(possiblepararmhere)
{
  yourcodehere;
}

我一直在试图找出通过正则表达式获得所有函数列表的最佳方法,无法找到获得所有定义函数列表的工作方法。谁能告诉我一个更好的方法或者用正则表达式来做?非常感谢!

编辑:这样的东西会在c#中工作吗?%[a-z_0-9^[^]*]++ [a-z_0-9*^[^]]+[ ^t]++[a-z_0-9*^[^]]+[ ^t]++^([*a-z_0-9]+^)[ ^t]++([^p*&, ^t^[^]a-z_0-9./(!]++)[~;]

使用正则表达式查找函数的最佳方法

如果你只是想要一个函数名列表,像这样的东西可能会起作用:

Regex.Matches(source,@"([a-zA-Z0-9]*)'s*'([^()]*')'s*{").Cast<Match>()
    .Select (m => m.Groups[1].Captures[0].Value).ToArray()

基本上,该正则表达式查找任何一组字母数字字符,后面跟着可选的空格,后面跟着开括号,后面跟着零个或多个非括号,后面跟着右括号,后面跟着可选的空格,然后是一个开花括号。

然后从那里提取开始部分,并创建一个列表。假设语言不允许右括号后跟一个左花括号,那么上面的代码应该可以工作。

如果您通过添加像'def'这样的保留关键字来更改语法,则会容易得多,因此您的声明变成:

def yourfunctionhere(possiblepararmhere)
{
    yourcodehere;
}

那么你可以使用一个简单的正则表达式,如def [a-zA-Z0-9]+

var pat=  @"'b(public|private|internal|protected)'s*" + @"'b(static|virtual|abstract)?'s*[a-zA-Z_]*(?<method>'s[a-zA-Z_]+'s*)" + @"'((([a-zA-Z_'[']'<'>]*'s*[a-zA-Z_]*'s*)[,]?'s*)+')" ;