zoukankan      html  css  js  c++  java
  • VIM 正则表达式详解及与 perl 正则的区别

    转载自:http://www.xuebuyuan.com/806332.html;个人进行了一些修正和添加。

    下面我们对 VIM 正则表达式进行介绍并会显示指出其与 Perl 正则的不同之处。

    字符集

    .         匹配任意一个字符 
    w        匹配单词字母,等同于[0-9A-Za-z_]。 
    W        匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_]。 
    	        匹配字符。 
    a        所有的字母字符. 等同于[a-zA-Z] 
    e        
    	        
    
            
            
    d        数字 [0-9] 
    D        非数字 [^0-9] 
    x        十六进制数 [0-9a-fA-F] 
    X        非十六进制数 [^0-9a-fA-F] 
    s        空白字符 [ ] ( 和),等同于[ /t]
    S        非空白字符 [^ ] (除  和 之外),等同于[^ /t]
    l        小写字母 [a-z] 
    L        非小写字母 [^a-z] 
    u        大写字母 [A-Z] 
    U        非大写字母 [^A-Z] 
    i        标识符字符 'isident'
    I        同于i,但排除了数字 
    k        关键字字符 
    K        同k,但排除数字 
    p        可打印字符 
    P        同p,但排除数字 
    f        文件名字符 
    F        同f,但排除数字 
    \_        表示段行,他与以上的字符组合,如 \_s,\_a 。。。
    

    范围

    [abc]     匹配方括号中的任意一个字符。可以使用-表示字符范围, 
    [a-z0-9]  匹配小写字母和阿拉伯数字。 
    [^abc]    在方括号内开头使用^符号,表示匹配除方括号中字符之外的任意字符。 
    

    多选一

    模式中的"或"操作符是"|"。(因为vim输入正则表达式是在vim命令模式下输入的,自然会存在一些特殊字符[就像java里输入要输入四个],故这里不能直接用|而应该用转义)
    如:
    /foo|bar
    (/是从上往下搜,?是从下往上搜)

    分组
    ()  (主要还是因为是在vim命令行里输入,而vim又不支持像bash一样用'pattern'括起来的字符串就只是字符串)
    在替换的时候可以使用 1、2 。。。来引用 () 捕获的内容
    perl : () ,替换的时候要么1要么$1,notepad++是后者。

    量次(重复次数)

    *              匹配0-任意个 
    *{-}(经过测试是-*才对)         * 的惰性模式    perl : *?
    +             匹配1 至任意个  perl : +
    +{-}(经过测试不行,但没测出是怎么写,可以用{-1,}代替)        + 的惰性模式    perl : +?
    ?             匹配0-1个      perl : ?
    {n,m}(后面的是可以省略的)        匹配n-m个      perl : {n,m}
    {-n,m}       {n,m} 的惰性模式    perl : {n,m}?
    {n}          匹配n个        perl : {n}
    {-n}         {n} 的惰性模式    perl : {n}?
    {n,}         匹配n 至任意个  perl : {n,}
    {-n,}        {n,} 的惰性模式    perl : {n,}?
    {,m}         匹配0- m 个    perl :  {0,m}
    
    元字符 说明 
    *        匹配 * 字符 
    .        匹配 . 字符 
    /        匹配 / 字符 
    \        匹配  字符 
    [        匹配 [ 字符
    很特别的是{就是普通字符,但是要模式匹配时反而要{,为什么不做成和[一样呢?

    位置

    $         匹配行尾 
    ^         匹配行首 
    <        匹配单词词首  perl : 
    >        匹配单词词尾 
    

    函数式
    :s/替换字符串//=函数式
    在函数式中可以使用 submatch(1)、submatch(2) 等来引用 /1、/2 等的内容,而submatch(0)可以引用匹配的整个内容。

  • 相关阅读:
    101. Symmetric Tree(js)
    100. Same Tree(js)
    99. Recover Binary Search Tree(js)
    98. Validate Binary Search Tree(js)
    97. Interleaving String(js)
    96. Unique Binary Search Trees(js)
    95. Unique Binary Search Trees II(js)
    94. Binary Tree Inorder Traversal(js)
    93. Restore IP Addresses(js)
    92. Reverse Linked List II(js)
  • 原文地址:https://www.cnblogs.com/silentdoer/p/8650399.html
Copyright © 2011-2022 走看看