2012-08-05 112 views
353

我正在尋找使用Sublime Text 2中的正則表達式進行搜索替換。documentation on this相當貧血。具體來說,我想要做一個替換組,所以喜歡將這段文字的東西:Sublime Text 2中的正則表達式搜索替換

Hello my name is bob

而這個搜索詞:

查找內容:my name is (\w)+

替換:my name used to be $(1)

搜索條款工作得很好,但我無法找到一種方法來實際使用正則表達式組進行替換。

回答

469

通常,對於第一個捕獲組(第一個括號中的模式匹配),反向引用是$1\1(反斜槓之一)。因此,也許嘗試:

my name used to be \1 

my name used to be $1 

UPDATE: 正如一些人指出,原來的拍攝模式是不正確的,只捕獲了名的最後一個字母,而不是全名。您應該使用以下模式拍攝的所有名字的字母:

my name is (\w+) 
+40

這兩個都可以在Sublime Text中使用。 – furq 2012-08-05 21:35:58

+12

除外,是不是'$ 0'? – 2013-03-30 21:58:27

+8

不,$ 0不用作正則表達式中的反向引用(因爲'\ 0'等於空字符,並且'\ 0ddd'用作代碼點ddd的字符的轉義符)。但是,根據[本頁],'$ 0'似乎在Sublime2中被用作「退出標記」(https://sublime-text-unofficial-documentation.readthedocs.org/en/latest/reference/snippets.html ?highlight = $ 0)(儘管我無法找到足夠的示例來計算Sublime2中如何使用出口標記)。 – Bobulous 2013-04-03 20:41:28

92

順便說一句,在上面的問題:

爲:

Hello, my name is bob 

找兼職:

my name is (\w)+ 

用替換部分:

my name used to be \1 

將返回:

Hello, my name used to be b 

變化發現部分:

my name is (\w+) 

而取代將是你所期望的:

Hello, my name used to be bob 

雖然(\ W)+將匹配「bob」,它不是你想要替換的分組。

37

使用在搜索字符串

還有就是要強調一個重要的事情()括號!所有在搜索字符串要在你的替換字符串使用匹配的段必須被接受()括號,否則,這些匹配的段將是不可到達與變量,如$ 1,$ 2,... .nor \ 1 \ 2,...等

例:

我們想要替換 '時間' 與 '像素',但保留數值:

margin: 10em 
margin: 2em 

因此我們使用margin: $1px a是替換字符串。


正確:()括號擁抱所需$1匹配的段爲:

FIND:margin: ([0-9]*)em(帶括號)

REPLACE TO:margin: $1px

結果:

margin: 10px 
margin: 2px 

WRONG:以下正則表達式模式將匹配所需的線,但匹配的段不會在替換字符串可以作爲變量,如$1

FIND:margin: [0-9]*em(無括號)

替換爲:margin: $1px

結果:($1未定義)

margin: px 
margin: px 
+1

謝謝,這個答案真的指出了一個有趣的事實,解決了我的問題。 – Enkk 2016-03-29 11:21:48

15

請注意,如果您使用多於9個捕獲組,則必須使用語法${10}

$10\10\{10}不是工作。

22

以下是已批准答案的視覺呈現。

enter image description here

相關問題