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

时间:2011-07-05 02:11:07

标签: c# regex

嘿伙计我正在使用自定义脚本语言,我正在使用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./(!]++)[~;]

3 个答案:

答案 0 :(得分:4)

如果您只想要一个类似于此功能名称的列表,可能会起作用:

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

基本上,正则表达式正在查找任意一组字母数字字符,后跟可选的空格,后跟一个左括号,后跟零或多个非括号,后跟一个紧括,后跟可选的空格,然后一个开放的花括号。

然后从那里你只提取开始部分,并创建一个列表。假设语言不允许紧密括号后面跟一个开括号括号,那么上面应该有效。否则将需要更多细节。

答案 1 :(得分:0)

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

def yourfunctionhere(possiblepararmhere)
{
    yourcodehere;
}

然后你可以使用像def [a-zA-Z0-9]+这样的简单正则表达式。

答案 2 :(得分:-1)

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*)+\)" ;