我想替换以下内容中的小写字符串:
SELECT lower1, lower2, lower3 FROM lower4, lower5 WHERE我使用vim replace用下面的正则表达式将它们替换为大写:
:%s/select\_.*\from\_.*\where/\U&/gic
当有其他select查询时,正则表达式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发布于 2012-02-21 18:49:32
在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\}.https://stackoverflow.com/questions/9373012
复制相似问题