Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用正则表达式匹配C中的函数和函数调用_C_Regex_Syntax Highlighting - Fatal编程技术网

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

使用正则表达式匹配C中的函数和函数调用,c,regex,syntax-highlighting,C,Regex,Syntax Highlighting,我对正则表达式还比较陌生,所以我编写了下面这个简单的正则表达式,它使用正向前瞻来检测C源文件中的函数和函数调用- \w+(?=\s*\() 它工作正常,但问题是它也检测非函数语法,如if(),while()等。 我可以很容易地通过说- (if(?!\()) | (while(?!\()) 但问题是如何将第二个正则表达式与第一个正则表达式结合起来?我不能或它们,因为第一个仍然匹配if(),while()等,在或表达式中,如果其中一个术语匹配就足够了 如何组合这些正则表达式或使用更好更简单的正则

我对正则表达式还比较陌生,所以我编写了下面这个简单的正则表达式,它使用正向前瞻来检测C源文件中的函数和函数调用-

\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
的情况下工作(
+
是贪婪的)。你应该把它作为答案贴出来!