4

我对正则表达式相当陌生,因此我使用正向前瞻编写了以下简单的正则表达式,该正则表达式检测 C 源文件中的函数和函数调用-

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

它工作正常,但问题是它也检测到非函数语法,如if(),while()等等。我可以很容易地避免这种情况:

(if(?!\()) | (while(?!\())

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

如何组合这些正则表达式或有一个更好更简单的不匹配非函数语法,如if()while()

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

斯金纳

正则表达式

4

1 回答 1

4

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

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

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

于 2012-07-16T08:44:58.483 回答