如何创建正则表达式以从代码中获取所有函数

时间:2012-04-24 13:46:37

标签: regex

我的正则表达式有些问题。我需要在文本中找到所有函数。我有这个正则表达式\w*\([^(]*\)。它工作正常,直到文本没有包含没有函数名称的括号。例如,对于此字符串'hello world () testFunction()',它会返回()testFunction(),但我只需要testFunction()。我想在我的c#应用程序中使用它来解析传递给我的方法字符串。有谁能够帮我? 谢谢!

5 个答案:

答案 0 :(得分:2)

编程语言具有层次结构,这意味着在一般情况下它们不能通过简单的正则表达式进行解析。如果要编写始终有效的正确代码,则需要使用LR解析器。如果您只想应用可以获取大多数功能的黑客,请使用以下内容:

\w+\([^)]*\)

但请记住,在某些情况下这会失败。例如。它无法区分函数定义(签名)和函数调用,因为它不会查看上下文。

答案 1 :(得分:1)

*更改为+(如果您的正则表达式实现中存在,则执行\w\w*)。这将确保\w匹配一个或多个次(而不是您当前拥有的零或更多)。

答案 2 :(得分:1)

尝试\w+\([^(]*\)

这里我已将\ w *更改为\ w +。这意味着匹配需要包含至少一个文本字符。

希望有所帮助

答案 3 :(得分:1)

它在很大程度上取决于“功能名称”的定义。例如,根据您的描述,您只想过滤掉“空”名称,而不想查找所有有效名称。

如果您当前的解决方案足够大,并且您对此空名称有疑问,请尝试将*更改为+,在括号前至少需要一个单词字符。

\w+([^(]*)

OR

\w\w*([^(]*)

取决于您的regexp应用程序的语法。

答案 4 :(得分:1)

(\w+)\(

正则表达式组将具有变量名称而不进行任何填充,如果您愿意,可以稍后添加它们,我认为您不需要参数。

如果您确实需要参数,请使用:

\w+\(.*\)

用于贪婪的正则表达式(它将匹配嵌套函数调用)
或...

\w+\([^)]*\)

对于非贪婪的正则表达式(与嵌套函数调用不匹配,只匹配内部函数)