使用正则表达式在C中匹配函数和函数调用

时间:2012-07-16 07:57:19

标签: c regex syntax-highlighting

我对正则表达式相当新,所以我使用正向前瞻来编写以下简单的正则表达式,它检测C源文件中的函数和函数调用 -

\w+(?=\s*\()

它运行正常,但问题是它还检测到if()while()等非函数语法。 我可以通过说 -

轻松避免这种情况
(if(?!\()) | (while(?!\())

但问题是如何将第二个正则表达式与第一个正则表达式结合起来?我不能OR他们,因为第一个仍然匹配if()while()等,并且在OR表达式中,如果其中一个术语匹配就足够了。

如何组合这些正则表达式或者有一个更简单的正则表达式,它与if()while()

等非函数语法不匹配

PS :我使用以下工具来测试我的正则表达式

GSkinner

RegexPal

1 个答案:

答案 0 :(得分:4)

当您使用正则表达式在C中搜索函数调用时,有很多假设。除此之外,如果您对匹配的内容感到满意(有效的函数调用将无法匹配),并且您希望从结果列表中排除ifwhile,则可以使用以下内容正则表达式:

(?!\b(if|while|for)\b)\b\w+(?=\s*\()

正则表达式使用单词边界\b来确保整个名称匹配(防止hilewhile的部分匹配),并且整个名称不是关键字(防止拒绝) whilenothinghappens)。