vim正则的非贪婪模式

vim中\{-}与*?相同 

所以vim的非贪婪模式为 .\{-}相当于其他的.*?

:set magic             " 设置magic
:set nomagic           " 取消magic
:h magic               " 查看帮助
  • magic (\m):除了 $ . * ^ 之外其他元字符都要加反斜杠。
  • nomagic (\M):除了 $ ^ 之外其他元字符都要加反斜杠。
  • 这个设置也可以在正则表达式中通过 \m \M 开关临时切换。 \m 后面的正则表达式会按照 magic 处理,\M 后面的正则表达式按照 nomagic 处理, 而忽略实际的magic设置。

    例如:

    /\m.*          # 查找任意字符串
    /\M.*          # 查找字符串 .* (点号后面跟个星号)

    另外还有更强大的 \v 和 \V。

    • \v (即 very magic 之意):任何元字符都不用加反斜杠
    • \V (即 very nomagic 之意):任何元字符都必须加反斜杠

    例如:

    /\v(a.c){3}$   # 查找行尾的abcaccadc
    /\m(a.c){3}$   # 查找行尾的(abc){3}
    /\M(a.c){3}$   # 查找行尾的(a.c){3}
    /\V(a.c){3}$   # 查找任意位置的(a.c){3}$

    默认设置是 magic,vim也推荐大家都使用magic的设置,在有特殊需要时,直接通过 \v\m\M\V 即可。

    本文下面使用的元字符都是 magic 模式下的。

vim的量词与perl相比一点也不逊色。

vimPerl意义
**0个或多个(匹配优先)
\++1个或多个(匹配优先)
\? 或 \=?0个或1个(匹配优先),\?不能在 ? 命令(逆向查找)中使用
\{n,m}{n,m}n个到m个(匹配优先)
\{n,}{n,}最少n个(匹配优先)
\{,m}{,m}最多m个(匹配优先)
\{n}{n}恰好n个
\{-n,m}{n,m}?n个到m个(忽略优先)
\{-}*?0个或多个(忽略优先)
\{-1,}+?1个或多个(忽略优先)
\{-,1}??0个或1个(忽略优先)

相关推荐