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)可以引用匹配的整个内容。

  • 相关阅读:
    便利的开发文档工具doxygen
    父页面 js 取得弹出窗口所选择的值, 弹出窗口关闭后刷新父页面
    ASCII码对照表
    C#中Brush、Color、String相互转换
    C#获取标准北京时间
    2005数据库脚本在SQL2000上执行 注意事项
    给Image控件后台赋Source值
    Web服务枚举组件不可用
    泛型集合转化为DataSet
    网站常见关于"登录|注册"和"姓名|注销"用JS实现
  • 原文地址:https://www.cnblogs.com/silentdoer/p/8650399.html
Copyright © 2011-2022 走看看