2013-07-30 33 views
2

提前爲易混淆的標題道歉。我的問題是如下,我有大約600文件以下文字:查找/替換允許邊界替換而不是表達式的功能

$_REQUEST['FOO'] 

我想用下面的來代替它:

$this->input->post('FOO') 

要澄清,我匹配對以下內容:

$_REQUEST any number of A-Za-z\d followed by a ] 

,並用替換它:

$this->input->post(the alphanumeric word from above followed by a) 

或一般:

Anchor token TEXT TO KEEP end anchor token 

這不同於標準查找/替換,因爲我想保留兩個字邊界內的文本。

此功能是否存在於任何文本編輯器(Eclipse,np ++等)中。或者我需要編寫一些類型的程序來解析這600個文件來進行替換?

回答

3
s/\$__REQUEST\[(.*?)]/$this->input->post(\1)/ 

.*?會匹配一切從[第一]而不是最後一次,雖然它不太可能會在這種情況下,無所謂。

順便說PHP超全局是$_REQUEST而非$__REQUEST

+0

我胖了,會改變原來的問題。那麼上面這行會根據需要進行更換? – Woot4Moo

+0

使用'[^ ​​\]] ++'而不是'。*?'可能會更好。 –

+0

@BoristheSpider - 我不同意。首先,你的方法會捕獲撇號。其次,非貪心應該使它工作得很好,只要括號是平衡的,我想他們是。 –

2

可以在記事本做++使用正則表達式。更換

\$_REQUEST\['([^']*)'\] 

$this->input->post('$1') 

如果你有雙引號也一樣,你可以做使用更復雜的表達式來處理這兩種情況,雖然我不知道記事本++支持反向引用;更換

\$_REQUEST\[(['"])(.*?)\1\] 

$this->input->post($1$2$1) 

請注意,我已經恢復了使用@ExplosionPills'這裏—建議(.*?)可能會更好,其實。

+0

第一個表達式不需要'[^']'模式的量詞嗎? –

+0

@BoristheSpider - 再次,謝謝! –

+0

失敗。輸出變成:$ this-> input-> post'foo'它沒有havce('foo')[missing the parens] – Woot4Moo