使用正则表达式匹配C中的函数和函数调用
我对正则表达式还比较陌生,所以我编写了下面这个简单的正则表达式,它使用正向前瞻来检测C源文件中的函数和函数调用-使用正则表达式匹配C中的函数和函数调用,c,regex,syntax-highlighting,C,Regex,Syntax Highlighting,我对正则表达式还比较陌生,所以我编写了下面这个简单的正则表达式,它使用正向前瞻来检测C源文件中的函数和函数调用- \w+(?=\s*\() 它工作正常,但问题是它也检测非函数语法,如if(),while()等。 我可以很容易地通过说- (if(?!\()) | (while(?!\()) 但问题是如何将第二个正则表达式与第一个正则表达式结合起来?我不能或它们,因为第一个仍然匹配if(),while()等,在或表达式中,如果其中一个术语匹配就足够了 如何组合这些正则表达式或使用更好更简单的正则
\w+(?=\s*\()
它工作正常,但问题是它也检测非函数语法,如if()
,while()
等。
我可以很容易地通过说-
(if(?!\()) | (while(?!\())
但问题是如何将第二个正则表达式与第一个正则表达式结合起来?我不能或它们,因为第一个仍然匹配if()
,while()
等,在或表达式中,如果其中一个术语匹配就足够了
如何组合这些正则表达式或使用更好更简单的正则表达式,而这些正则表达式将不匹配非函数语法,如if()
,while()
PS:我使用以下工具测试我的正则表达式
使用正则表达式在C中搜索函数调用时,有很多假设。除此之外,如果您对匹配的内容感到满意(存在不匹配的有效函数调用),并且希望从结果列表中排除if
和while
,则可以使用以下正则表达式:
(?!\b(if|while|for)\b)\b\w+(?=\s*\()
正则表达式使用单词边界\b
来确保整个名称是匹配的(防止中的和部分匹配,而中的),并且整个名称不是关键字(防止拒绝而不会出现)。处理C文件时使用的语言/工具是什么?如果它支持环视,那么您可以使用负向前看(?!(If | while))
,然后是正则表达式来匹配函数。我不相信正则表达式是适合这项工作的工具-它很容易使看起来很混乱的事情变得难以正确匹配。@nhahdh我接受了你的建议。它似乎没有按照我的意愿工作。你能检查一下我是不是出了什么差错吗?@PavanManjunath:在单词边界中加入负面展望:它也可以在没有最后一个\b
的情况下工作(+
是贪婪的)。你应该把它作为答案贴出来!