2011-03-27 32 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