2011-03-27 51 views
0

結合`爲了解決一個MySQL 5.0到5.1的兼容性的問題時,我試圖改變這一格局:混亂的正則表達式的行爲與(

KEY `brand_id` (`brand_id`) USING BTREE 

這樣:

KEY `brand_id` USING BTREE (`brand_id`) 

在vim中運行以下正則表達式找到所有發生的問題:

KEY `.*` \(.*\) USING BTREE 

所以,我試着只是修改這個到foll由於替換字符串,但它不能再找到匹配的字符串。爲什麼?

%s/KEY (`.*`) (\(.*\)) USING BTREE/KEY \1 USING BTREE (\2)/gc 

回答

2

我不知道爲什麼,但在Vim中你需要躲避匹配括號,讓他們獨處的時候,他們是從字面上理解。嘗試:

%s/KEY \(`.*`\) \((.*)\) USING BTREE/KEY \1 USING BTREE \2/gc 
+0

我會+1任何人誰告訴我如何反轉這種奇怪的行爲一勞永逸...... – mvds 2011-03-27 22:10:27

+0

這樣做。在替換字符串中我還有一些額外的parens,所以它最終以如下方式工作:%s/KEY \('。*'\)\((。*)\)使用BTREE/KEY \ 1使用BTREE \ 2/gc – squawknull 2011-03-27 22:11:27

+1

如果您在搜索模式中啓用了['非常神奇模式'](http://vimdoc.sourceforge.net/htmldoc/pattern.html#/magic),那麼它會反轉轉義要求,這樣'() '組並且捕獲它的內容,並且字面括號匹配必須被轉義'\(\)'。我發現這更符合我在其他地方使用正則表達式的經驗,所以更願意總是使用非常神奇的模式。在這種情況下,搜索模式將是'\ vKEY('。*')(\(。* \))USING BTREE'。 – nelstrom 2011-03-28 07:09:37