最近跟着施届同学的文章系统性的学习正则表达式,这边将常用的简单记录.
施届同学的正则表达式系列文章:
一个神奇高效的工具-正则表达式(一)
一个神奇高效的工具-正则表达式(二)
一个神奇高效的工具-正则表达式(三)
一个神奇高效的工具-正则表达式(四)
一个神奇高效的工具-正则表达式(五)
一个神奇高效的工具-正则表达式(六)
一个神奇高效的工具-正则表达式(七)
正则表达式简单分类
- 基本的正则表达式(Basic Regular Expression 又叫 Basic RegEx 简称 BREs)
- 扩展的正则表达式(Extended Regular Expression 又叫 Extended RegEx 简称 EREs)
- Perl 的正则表达式(Perl Regular Expression 又叫 Perl RegEx 简称 PREs)
Linux的grep命令是Basic的,使用grep -E或者egrep 则是Extended
Perl的练习网站: http://tool.oschina.net/regex/#
Extends 扩展类语法
1、字符类
. | 匹配任意一个字符 |
---|---|
[] | 匹配括号中的任意一个字符 |
- | 用在[]中,表示字符范围 |
^ | 如果位于[]的开头,则匹配除去括号中字符之外的一切字符 |
[[:xxx:]] | grep 工具预定义的一些命名字符类,例如 [[:alpha:]] 匹配一个字母,[[:digit:]] 匹配一个数字 |
2、数量限定符
? | 紧跟在它前面的单元匹配零次或一次 |
---|---|
+ | 紧跟在它前面的单元匹配一次或多次 |
* | 紧跟在它前面的单元匹配零次或多次 |
{N} | 紧跟在它前面的单元应精确匹配N次 [1-9][0-9]{2} 匹配从100 到999 的整数 |
{N,} | 紧跟在它前面的单元至少要匹配n次 |
{,M} | 紧跟在它前面的单元至多匹配m次 |
{N,M} | 紧跟在它前面的单元至少匹配n次,至多匹配m次 |
3、位置限定符
^ | 匹配行首的位置 |
---|---|
$ | 匹配行末的位置 |
< | 匹配单词开头的位置 |
> | 匹配单词结尾的位置 |
\b | 匹配单词开头或结尾的位置 |
\B | 匹配非单词开头和结尾的位置 |
4、其他特殊字符
\ | 转义字符,普通字符转义为特殊字符,特殊字符转义为普通字符 |
---|---|
() | 将正则表达式的一部分括起来组成一个单元,可以对整个单元使用数量限定符 |
l | 连接两个表达式,表示或的关系 |
元字符
^ | ^会匹配行或者字符串的起始位置,有时还会匹配整个文档的起始位置。 |
---|---|
$ | $会匹配行或字符串的结尾 |
. | 代表任意字符 |
加强版
“\d” | 匹配数字 |
---|---|
“\w” | 匹配字母,数字,下划线. |
“\s” | 匹配空格 |
反义
“\W” | 匹配任意不是字母,数字,下划线 的字符 |
---|---|
“\S” | 匹配任意不是空白符的字符 |
“\D” | 匹配任意非数字的字符 |
“\B” | 匹配不是单词开头或结束的位置 |
”[^abc]” | 匹配除了abc以外的任意字符 |
测试
a.c
3.c
4.v
5.d
34.c
3.c
6.c
s.c
http://www.hao123.com
https://shijie93.github.io
a[1]=1
b[2]=2
匹配所有.c结尾的: egrep ".c$" zz.txt
匹配只有数字开头.c结尾的: egrep "[0-9]+.c$" zz.txt
匹配网址:
- 写法1,基本语法写法: grep “http[]://[a-zA-Z0-9.]*” zz.txt
- 写法2,扩展语法: egrep “https?://[a-zA-Z0-9.]*” zz.txt
- 写法3,扩展语法: egrep “http[s]{0,1}://[a-zA-Z0-9.]*” zz.txt
- 写法4,增强语法: https?://[\w.]+