假设我想在我的列表中查找所有函数调用(vb.net列表),并且我有函数名称。 首先,我认为我可以做一个正则表达式,例如:
myfunc\( .* \)
即使函数跨越多行也应该有效,假设点被解释为包含换行符(在dot-net中有一个选项)
然后我意识到我的一些论点本身可能是函数调用。
换句话说:
myfunc(a,b,c,d(),e),
这意味着括号不匹配。
所以我认为因为主函数调用通常是一行上的第一项,所以我可以这样做:
^myfunc( .* \) $
这个想法是函数是一行上的第一项(^),最后一个paren是一行($)上的最后一项。但这也不起作用。
我做错了什么?
答案 0 :(得分:3)
你做不到。按照设计,正则表达式不能处理这里需要的递归。
有关详细信息,您可能需要阅读第一个答案:Can regular expressions be used to match nested patterns?
是的,我知道一些特殊的“正则表达式”允许递归。但是,在大多数情况下,这意味着你正在做一些可怕的事情。使用能够真正理解您语言语法的东西要好得多。
答案 1 :(得分:0)
这不是您问题的直接答案,但如果您想查找函数的所有用途,可以使用Visual Studio。只需右键单击该功能,然后选择Find All References
:
Visual Studio将显示结果。然后,您可以双击每一行,Visual Studio将带您到那里。