首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式匹配任何内容、字符串、多个字符串,包括VIM中的newline non greedy

正则表达式匹配任何内容、字符串、多个字符串,包括VIM中的newline non greedy
EN

Stack Overflow用户
提问于 2012-02-21 14:10:57
回答 1查看 660关注 0票数 1

我想替换以下内容中的小写字符串:

代码语言:javascript
复制
SELECT lower1, lower2, lower3 FROM lower4, lower5 WHERE

我使用vim replace用下面的正则表达式将它们替换为大写:

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

当有其他select查询时,正则表达式select\_.*\from\_.*\where并不好用:

例如,它选择此查询中的所有内容,并影响不能升序的字符串

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-21 18:49:32

在vim正则表达式中有非贪婪模式。使用\{-}而不是*

我认为,正则表达式select\_.\{-}from\_.\{-}where就是您想要的。

这里有一些文档。

:h non-greedy

代码语言:javascript
复制
                            *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\}.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9373012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档