2012-03-29 34 views
1

我需要正則表達式來查找函數調用在PHP中的字符串,我試圖在這裏搜索stackoverflow但沒有我嘗試過的工作。正則表達式找到函數調用php

這種模式:^.*([\w][\(].*[\)])

這將匹配:functionone(fgfg)functionone(fgfg) dhgfghfgh functiontwo()作爲一個匹配。不是兩個獨立的匹配(如functionone(fgfg)functiontwo()

我不知道怎麼寫,但我覺得這是我需要的。
1.任何字符串,然後
2.任何字符串後面

然後它應該停止,不能繼續下去。任何正則表達式,大師,可以幫助我嗎?

+0

而不是。*這是貪婪的運營商,嘗試使用。*?,這是懶惰的。 – ddinchev 2012-03-29 08:19:10

+2

請看這裏:http://www.php.net/manual/en/function.get-defined-functions.php – diEcho 2012-03-29 08:19:17

+0

玩得開心$ x = functionOne(functionTwo(「fgfg」));和所有類似的排列無數 – 2012-03-29 09:45:10

回答

4

我看到5個問題與您正則表達式

  1. 如果你想在同一行中匹配2層的功能,不使用錨^,這將錨定正則表達式的字符串的開始。

  2. 然後,您不要在一開始需要.*也許更多像\w+(我不知道什麼是函數名的PHP的規範是)

  3. 如果是性格上只有一個條目類別(並且不是否定的),則不需要字符類別

  4. 括號之間的量化符需要是一個惰性字符(後跟?)。這4個點後,所以,你的正則表達式將看起來像

    \w+\(.*?\) 
    
  5. 是一個正則表達式真正完成這個工作的工具?

+0

這真的很有用,非常感謝你!但你沒事。 Tokenizer會是一個更好的選擇,但它沒有找到我的函數作爲函數,但作爲HTML。 – jocken 2012-03-29 12:09:41

5

不要使用正則表達式這個...使用PHP的內置tokenizer

1

函數簽名不是常規語言。因此,您不能使用正則表達式來匹配函數簽名。您當前的正則表達式將匹配非有效函數簽名的簽名。

我建議你使用的是PHP標記器。

+1

有效點,無效的參數,[PCRE不規則](http://stackoverflow.com/questions/7434272/match-an-bn-cn-eg-aaabbbccc-using-regular-expressions -pcre)。 – Qtax 2012-03-29 08:22:11