我的正则表达式有些问题。我需要在文本中找到所有函数。我有这个正则表达式\w*\([^(]*\)
。它工作正常,直到文本没有包含没有函数名称的括号。例如,对于此字符串'hello world () testFunction()'
,它会返回()
和testFunction()
,但我只需要testFunction()
。我想在我的c#应用程序中使用它来解析传递给我的方法字符串。有谁能够帮我?
谢谢!
答案 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+\([^)]*\)
对于非贪婪的正则表达式(与嵌套函数调用不匹配,只匹配内部函数)