2014-10-27 20 views
0

我想在php中通過preg_match()在php中掃描我所有的腳本文件。如何通過PHP中的preg_match參考捕獲所有函數調用

我想捕捉每一行,其中是一個或多個引用的功能,但只有調用,而不是定義。

我的意思是我想趕上foo(&$bar),但我不想趕上function foo(&$bar),foo($bar)

如何使正則表達式中的引用否定?

輸入:

function foo($bar) //line1 
function foo(&$bar) //line2 
foo($bar) //line3 
foo(&$bar) //line4 
foo("&ampBar") //line5 

所需的輸出:

foo(&$bar) //line4 
+0

你應該張貼一些投入和嘗試和預期產出 – vks 2014-10-27 11:13:07

+2

這是不可能用一個正則表達式準確地做。一個正則表達式不可能找到'/ * foo(&$ bar)* /'和類似的錯誤肯定的所有可能的排列並排除它們。使用解析器。 – deceze 2014-10-27 11:13:43

+0

@vks:這還不是最終答案,但它可能是一個很好的第一步,謝謝;) – user3383675 2014-10-27 11:23:34

回答

0
^(?<!function\s)\s*\w+\([^)]*&[^)]*\)$ 

嘗試this.See演示。

http://regex101.com/r/sU3fA2/15

+1

該解決方案假定在函數定義中'function'和函數名稱之間只有一個空格。 – nhahtdh 2014-10-27 11:31:42

+0

@nhahtdh'\ s +'? – vks 2014-10-27 11:32:18

+0

http://regex101.com/r/qH3fA8/1 – nhahtdh 2014-10-27 11:33:13