当前位置:  开发笔记 > 编程语言 > 正文

使用C#和regex解析源代码并使用参数查找函数调用

如何解决《使用C#和regex解析源代码并使用参数查找函数调用》经验,为你挑选了1个好方法。

我有一个存储在数据库中的函数调用列表,对于一些函数调用,我关心函数调用的参数是什么.我用我的程序(在C#中)解析C源代码.我正在尝试找到使用参数获取函数调用的最佳方法.我在解析它之前将源代码读入一个字符串(这样我就不在文件上使用流阅读器了).我尝试使用一些正则表达式(这对我来说有点新)来解析源文件,但在使用这样的正则表达式字符串时检索的不仅仅是函数调用:functionCall +".*\\)"; (我正在逃避开放(在函数调用中)

函数调用以下列格式存储在DB中

Function Call
============
some_Call(

他们以这种方式存储是有原因的,不会改变.

有没有通过正则表达式做到这一点的好方法,还是我更适合浏览源代码内容?

如果需要澄清,请与我们联系.



1> Daniel LeChe..:

您的解决方案失败的部分原因是您可能应该使用.*?),而不是贪婪的匹配.

一个完整的答案必须遵循至少这些:

忽略字符串和字符中的括号(你可以用正则表达式做,虽然转义它可能有点复杂)

functionCall("\")", ')')

忽略注释中的括号(可以使用正则表达式)

functionCall(/*)*/ 1, // )
2)

不要太匹配(你可以用正则表达式)

functionCall(1) + functionCall(2) + (2 * 3) // Don't match past the first )

但它也必须忽略平衡的括号

functionCall((1+(1))*(2+2))

最后一个是普通正则表达式无法做到的,因为它涉及计算括号,并且通常是正则表达式不适合的.但是,似乎.NET有办法做到这一点.

(从技术上讲,你必须处理宏,我可以想象一个

#define close_paren )

会破坏你的一天...)

也就是说,你可能会想出一个天真的解决方案(类似于你所拥有的,或其他海报推荐的解决方案),并且它适用于许多情况,特别是如果你正在使用已知的输入.

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有