2012-10-19 21 views
0

我猜「在一個文件樹」就足夠了,但這是我的情況。如何在PHP項目中執行大量且複雜的字符串替換?

我給一個任務,以取代

some_function('string_parameter'.$some_optional_var.');

所有實例

some_function().'string_parameter'.$some_optional_var.';在一個PHP項目。

參數可以在函數被調用的任何地方不同。

我敢肯定,我可以通過用戶正則表達式或類似的,但正則表達式的東西是不是我的強項......

我使用Eclipse靛藍是否有幫助。謝謝!

+0

查找/替換應該做的 – Dev

+0

參數。的所有情況下的功能都不相同。我更新了我的問題 – Loupax

+0

先進行一次幹運行,然後搜索一個像這樣的模式:'some_function([^)] +);' – DavidO

回答

2

這是一個解決方案,在Eclipse中進行搜索和替換。

搜索:

some_function\(([^)]+)\) 

更換:

some_function().$1 

(這使內容調用裏面some_function後,也不管內容是什麼。如果這是不夠具體,您需要準確描述您需要處理的some_function的哪種情況。)

顯然,您需要打開正則表達式選項。

說明:

some_function匹配確切的文本。

\(... \)由於圓括號是正則表達式中的一個特殊字符,因此需要使用反斜槓來轉義它們,以便匹配實際的括號。

(...)內部圓括號創建一個捕獲組來記錄這部分正則表達式匹配的內容。

[^)]+字符類匹配未括號的一個或多個字符(^否定字符類;所述+要求那裏是至少一個字符,並且儘可能多的匹配

$1。更換 - 插入上面括號中捕獲的值可以捕獲很多不同的東西帶括號的不同羣體,他們將進入$1$2$3

+0

這工作完美!謝謝! – Loupax

+0

只需注意一點:它的some_function將另一個函數作爲參數,這會導致一些奇怪的結果。像some_function('Text'.some_other_function('text'))將轉向some_function()。some_other_function()。'text',但這隻在我的代碼中發生過幾次,所以很容易用手修復:) – Loupax

+0

@ Loupax,是的,好點。我沒有說過這件事。實際上幾乎不可能做出正確處理所有情況的正則表達式。它將不得不允許任意數量的嵌套函數。關於字符串或註釋中的括號怎麼辦?儘管如此,我很高興這對你很好。 – dan1111