c# - 使用 C# 和正则表达式解析源代码并查找带参数的函数调用

标签 c# regex parsing

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

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

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

它们以这种方式存储是有原因的,并且不会改变。

是否有通过正则表达式执行此操作的好方法,或者我是否更适合遍历源代码内容?

如果需要任何说明,请告诉我。

最佳答案

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

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

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

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

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

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

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

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

但它也必须忽略平衡括号

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

最后一个是普通正则表达式无法做到的事情,因为它涉及计算括号,并且通常是正则表达式不适合的事情。然而,似乎.NET has ways to do this .

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

#define close_paren )

会毁了你的一天......)

也就是说,您可能会想出一个简单的解决方案(类似于您已有的解决方案或其他发帖人推荐的解决方案),并且它适用于许多情况,尤其是当您使用已知输入时。

关于c# - 使用 C# 和正则表达式解析源代码并查找带参数的函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/582439/

相关文章:

javascript - 由于空闲超时插件,页面加载事件多次触发?

c# - silverlight 中的 JWT token

java - 正则表达式用于检查字符串中是否缺少单词模式

javascript - 如何在 jQuery 中解析 JSON 多维数组?

java - 如何在Java中读写没有某些节点的XML文件

c# - 通用类型推断,Fluent Api,具有预先声明的类型

java - 从 Java 或 C# 访问一个用 Python 编写的返回数组的函数

r - 排除某个字符串第二次出现后的所有内容

Java通过正则表达式分割字符串

java - 解析日志文件 - 使用 java 和绘图