正则表达式学习

Posted by 夏敏的博客 on July 11, 2017

最近跟着施届同学的文章系统性的学习正则表达式,这边将常用的简单记录.

施届同学的正则表达式系列文章:

一个神奇高效的工具-正则表达式(一)
一个神奇高效的工具-正则表达式(二)
一个神奇高效的工具-正则表达式(三)
一个神奇高效的工具-正则表达式(四)
一个神奇高效的工具-正则表达式(五)
一个神奇高效的工具-正则表达式(六)
一个神奇高效的工具-正则表达式(七)

正则表达式简单分类

  1. 基本的正则表达式(Basic Regular Expression 又叫 Basic RegEx 简称 BREs)
  2. 扩展的正则表达式(Extended Regular Expression 又叫 Extended RegEx 简称 EREs)
  3. 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.]+
作者:Anderson大码渣,欢迎关注我的简书: Anderson大码渣