2012-07-16 80 views
4

我是相當新進的正則表達式,所以我使用檢測功能,並在C源文件 -匹配函數和函數在C調用使用正則表達式

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

它的工作原理函數調用正向前查找寫下了以下簡單的regex很好,但問題是它檢測到像if()while()等非功能語法。 我可以很容易地通過saying-

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

避免這一點,但問題是如何將第二正則表達式與第一個結合?我不能OR他們,COS第一個仍然匹配if(),while()等,在OR表達式,它足夠的,如果其中一個條件匹配。

如何將這些正則表達式合併或有更好更簡單的一個,這將不符合像if()非功能語法,while()

PS:我使用以下工具來測試我的正則表達式

GSkinner

RegexPal

+1

什麼是您用來處理C文件的語言/工具?如果它支持環視,那麼你可以使用負面預覽'(?!(if | while))',然後是正則表達式來匹配函數。 – nhahtdh 2012-07-16 07:59:06

+2

我不相信正則表達式是適合這項工作的正確工具 - 製作難以匹配的東西很容易。 – Flexo 2012-07-16 08:03:26

+0

@nhahtdh我[試過](http://regexr.com?31hq1)你的建議。它似乎沒有按照我的意圖行事。你能否檢查我是否出了問題? – 2012-07-16 08:09:08

回答

4

當您搜索時有很多假設使用正則表達式在C中調用函數。這且不說,如果你是幸福什麼是匹配的(也有將不匹配有效的函數調用),並希望從結果列表中排除ifwhile,您可以使用下面的正則表達式:

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

正則表達式使用單詞邊界\b,以確保整個名稱匹配(防止在whilehile部分匹配),整個名稱不關鍵字(防止排斥反應的whilenothinghappens)。

相關問題