我对正则表达式相当新,所以我使用正向前瞻来编写以下简单的正则表达式,它检测C源文件中的函数和函数调用 -
\w+(?=\s*\()
它运行正常,但问题是它还检测到if()
,while()
等非函数语法。
我可以通过说 -
(if(?!\()) | (while(?!\())
但问题是如何将第二个正则表达式与第一个正则表达式结合起来?我不能OR
他们,因为第一个仍然匹配if()
,while()
等,并且在OR
表达式中,如果其中一个术语匹配就足够了。
如何组合这些正则表达式或者有一个更简单的正则表达式,它与if()
,while()
PS :我使用以下工具来测试我的正则表达式
答案 0 :(得分:4)
当您使用正则表达式在C中搜索函数调用时,有很多假设。除此之外,如果您对匹配的内容感到满意(有效的函数调用将无法匹配),并且您希望从结果列表中排除if
和while
,则可以使用以下内容正则表达式:
(?!\b(if|while|for)\b)\b\w+(?=\s*\()
正则表达式使用单词边界\b
来确保整个名称匹配(防止hile
中while
的部分匹配),并且整个名称不是关键字(防止拒绝) whilenothinghappens
)。