2012-11-28 133 views
8

我想將公共方法替換爲有註釋的方法的受保護方法。在geany中查找替換命名組regexp

這是因爲我使用phpunit來測試其中的一些方法,但他們確實不需要公開,所以我想在生產服務器上切換它們,並在測試時切換回來。

這裏是方法聲明:

public function extractFile($fileName){ //TODO: change to protected 

這是正則表達式:

(?<ws>^\s+)(?<pb>public)(?<fn>[^/\n]+)(?<cm>//TODO: change to protected) 

如果我將其替換爲:

\1protected\3\//TODO: change back to public for testing 

這似乎是工作,但我不能上班就是命名替換。我必須用\ 1來獲得第一組。如果在替換文本中無法訪問它們,爲什麼命名這些組?嘗試過像\,$ ws,\ $ ws之類的東西,但這不起作用。

我的問題是:如果我想用命名組替換\ 1,替換文本是什麼?

+0

謝謝,雖然沒有這樣做。在文檔中找不到它。如果你可以命名組,你會認爲你可以在替換字符串中使用它。我通常會對任何有用的答案投票,現在我看到你也可以接受。現在就做這個。 – HMR

回答

6

?<ws>命名組語法與.NET/Perl使用的相同。對於那些正則表達式引擎,指定組的替換字符串引用是${ws}。這意味着你的替換字符串是:

${ws}protected${fn}\//TODO: change back to public for testing

通過m.buettner提到的\k<ws>參考僅用於實際正則表達式反向引用。

額外的信息:

好像geany也允許使用Python的風格命名組:

  • ?P<ws>是捕捉語法
  • \g<ws>被替換字符串語法
  • (?P=ws)是正則表達式反向引用語法

編輯:

看起來我希望有一個解決方案沒有成功。從manual,

「子模式可以用三種方法之一來命名:(?...)或(?'名稱'...),如在Perl中,或(?P ...) Python可以通過名稱以及編號來進行從模式其他部分捕獲括號的引用,例如反向引用,遞歸和條件。

進一步回落:

「命名子模式回到引用使用Perl語法\ k或\ k'name」或Python語法(P =名字嗎?)。「

‘A 子模式引用前或引用後出現在模式。’

所以,我的語法推斷爲使用命名羣組是正確的,不幸的是,它們只能用於匹配模式,這就回答了你的問題「爲什麼命名羣組?」。在匹配模式中實現已命名的組及其用法,爲什麼不在替換字符串中實現用法?

+0

謝謝你的回答。也許我有一個不同的geany,但如果我使用表達式「(? win)7」替換爲:「$ {w} 8」,則結果是:「$ {w} 8」使用geany 1.22 – HMR

+0

@HMR - 我其實沒有geany。我觀察到捕獲語法與.NET/Perl相同,當我檢查在線手冊時,也同樣允許使用'?'ws''。我希望底層的正則表達式引擎允許在替換字符串中使用相同的名稱捕獲。只是做了更多的手冊閱讀。似乎在替換字符串中不允許指定命名組。我將編輯我的答案以包含更多詳細信息。 – robinCTS

+0

謝謝羅賓花時間研究這個問題。我沒有在文檔中找到關於替換字符串的任何內容,但想確定在排除之前我沒有忽略某些內容。 – HMR