2012-02-21 191 views
1

我想内更换小写字符串:正则表达式匹配任何字符串,多个字符串包括VIM换行符非贪婪

SELECT lower1, lower2, lower3 FROM lower4, lower5 WHERE 

我使用vim替换将它们与此正则表达式替换为大写:

:%s/select\_.*\from\_.*\where/\U&/gic

正则表达式select\_.*\from\_.*\where不好当有其他的选择查询:

例如 它选择在此查询一切,影响不能大写

SELECT lower1, lower2, lower3 FROM lower4, lower5 WHERE lower1=cannot_be_uppercased 
UNION all 
SELECT lower1, lower2, lower3 FROM lower6, lower7 WHERE lower1=cannot_be_uppercased 
+0

你们是不是要小写一切,但SQL关键字? – JaredPar 2012-02-21 06:17:26

+0

你的正则表达式有什么问题?当我在你的例子中尝试它时,它似乎按照你的要求去做。 – 2012-02-21 06:33:11

+0

我不确定你的期望,但也许你想使用非贪婪的量词\ { - }而不是贪婪的量词*。 – Raimondi 2012-02-21 06:55:40

回答

1

琴弦有在VIM正则表达式非贪婪模式。代替使用*,请使用\{-}。我想,正则表达式select\_.\{-}from\_.\{-}where是你想要的。

这是一些文档。

:h non-greedy

      *non-greedy* 
If a "-" appears immediately after the "{", then a shortest match 
first algorithm is used (see example below). In particular, "\{-}" is 
the same as "*" but uses the shortest match first algorithm. BUT: A 
match that starts earlier is preferred over a shorter match: "a\{-}b" 
matches "aaab" in "xaaab". 

Example   matches ~ 
ab\{2,3}c  "abbc" or "abbbc" 
a\{5}   "aaaaa" 
ab\{2,}c  "abbc", "abbbc", "abbbbc", etc. 
ab\{,3}c  "ac", "abc", "abbc" or "abbbc" 
a[bc]\{3}d  "abbbd", "abbcd", "acbcd", "acccd", etc. 
a\(bc\)\{1,2}d  "abcd" or "abcbcd" 
a[bc]\{-}[cd]  "abc" in "abcd" 
a[bc]*[cd]  "abcd" in "abcd" 

The } may optionally be preceded with a backslash: \{n,m\}. 
+0

这工作完美。谢谢! – bbnn 2012-02-22 01:13:35

相关问题