VIM 正则表达式详解及与 perl 正则的区别
转载自:http://www.xuebuyuan.com/806332.html;个人进行了一些修正和添加。
下面我们对 VIM 正则表达式进行介绍并会显示指出其与 Perl 正则的不同之处。
字符集
. 匹配任意一个字符
\w 匹配单词字母,等同于[0-9A-Za-z_]。
\W 匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_]。
\t 匹配字符。
\a 所有的字母字符. 等同于[a-zA-Z]
\e
\t
\r
\b
\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 : \b
\> 匹配单词词尾
函数式
:s/替换字符串//=函数式
在函数式中可以使用 submatch(1)、submatch(2) 等来引用 /1、/2 等的内容,而submatch(0)可以引用匹配的整个内容。
VIM 正则表达式详解及与 perl 正则的区别的更多相关文章
- Linux文本处理三剑客之grep及正则表达式详解
Linux文本处理三剑客之grep及正则表达式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux文本处理三剑客概述 grep: 全称:"Global se ...
- JavaScript正则表达式详解(一)正则表达式入门
JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...
- JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解
二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...
- Java 正则表达式详解_正则表达式
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- Django url配置 正则表达式详解 分组命名匹配 命名URL 别名 和URL反向解析 命名空间模式
Django基础二之URL路由系统 本节目录 一 URL配置 二 正则表达式详解 三 分组命名匹配 四 命名URL(别名)和URL反向解析 五 命名空间模式 一 URL配置 Django 1.11版本 ...
- Python正则表达式详解——re库
一.简介 1.1.相关链接 官方文档: Python2:https://docs.python.org/2/library/re.html Python3:https://docs.python.or ...
- Django路由配置之正则表达式详解
正则表达式详解 urls.py from django.conf.urls import url from . import views urlpatterns = [ url(r'^articles ...
- (转)linux正则表达式详解
linux正则表达式详解 http://blog.csdn.net/wuliowen/article/details/64131815 1:什么是正则表达式: 简单的说,正则表达式就是处理字符串的方法 ...
- [转帖]xargs命令详解,xargs与管道的区别
xargs命令详解,xargs与管道的区别 https://www.cnblogs.com/wangqiguo/p/6464234.html 之前一直说要学习一下 xargs 到现在为止也没学习.. ...
随机推荐
- Vue.js路由详解
有时候,我们在用vue的时候会有这样的需求,比如一个管理系统,点了左边的菜单栏,右边跳转到一个新的页面中,而且刷新的时候还会停留在原来打开的页面. 又或者,一个页面中几个不同的画面来回点击切换,这两种 ...
- 经典动态规划python实现
1.最长上升子序列 对于一个数字序列,请设计一个复杂度为O(nlogn)的算法,返回该序列的最长上升子序列的长度,这里的子序列定义为这样一个序列U1,U2...,其中Ui < Ui+1,且A[U ...
- python函数式编程(转)
函数式编程是使用一系列函数去解决问题,按照一般编程思维,面对问题时我们的思考方式是“怎么干”,而函数函数式编程的思考方式是我要“干什么”. 至于函数式编程的特点暂不总结,我们直接拿例子来体会什么是函数 ...
- proc
1. /proc 下文件的内容是动态创建的,当文件可写时可用作控制和配置目的. 2. 在某个进程读取 /proc 文件时,内核会分配一个内存页,驱动程序通过这个内存页将数据返回到用户空间 (read( ...
- 使用JS伪造Post请求
[使用JS伪造Post请求] 提到伪造Post请求,首先想到的是构造HTTP包.但实际上有一种更简单的方法,构造HTML FORM表单,使用js进行提交.如下:
- Scriptable Object
[Scriptable Object] ScriptableObject 是一个可继承的Class,适用于存储大数据的情形. Consider for example that you have m ...
- easyUIDataGrid分页
package com.cn.eport.util; import java.util.List; /** * * * @author zh * */ public class DataGrid im ...
- java基础五 [数字与静态](阅读Head First Java记录)
本章主要讲了静态变量.静态方法,final关键词.以及介绍了怎么对数字和日期进行格式化输出.这里对这些内容进行了整理.本章还介绍了java.util.Date和java.util.Calendar来操 ...
- for循环语句输出菱形
for(int a = 5; a > 0 ; a--){ for(int b = 1; b <= a; b++){ System.out.print(" "); } f ...
- for循环计算阶乘的和,for循环计算阶乘倒数的和
计算阶乘的和 //阶乘的和,5!+4!+3!+2! int a = 5; for(int b = 4; b > 0; b--) { a = a * b; } //先定义好最大数的阶乘是多少 in ...