正则表达式总结

一、字符类(一个字符,一位)

1、[ ] 由一对中括号包裹,取其中的任意一个字符

2、- 用于表示字符类的范围,这个字符只在[ ]内才有此意义

3、^ 用于对字符类进行反义,这个字符只在[ ]内才有此意义

4、一些在字符类外有特殊意义的元字符,如元字符 . 、管道符 | 、分组符 ( ) 、重复次数字符? + * { }、单词分隔符$,在字符类内部时仅表示一个普通的字符。

二、转义字符

1、/d   0-9任意一个数字

2、 /w  匹配一个单词字符:字母、数字、下划线、汉字,即可以出现在单词中的字符

3、/s 空格,制表符,回车或者换行中的任意一个字符

4、/D  任意一个非数字字符

5、/W  任意一个非字母、非数字、非下划线的字符

6、/S  任意一个非空字符

三、重复次数:{} ? * +

ab{4} 表示字符b重复4次,匹配字符串abbbb

ab{2,4}  表示字符b重复2到4次,匹配字符串abb或abbb或abbbb

ab? 表示字符b重复0到1次,匹配字符串ab或a

ab* 表示字符b重复0到无数次,匹配字符串a或ab或abb或abbb...

ab+ 表示字符b重复1到无数次,匹配字符串ab或abb或abbb...

四、元字符

1、.  任意一个字符

2、| 管道符,表示连接多种选择。

3、() 分组

五、单词边界:boundary

单词边界,用转义字符\b表示。指的是一个单词字符(\w)和一个非单词字符(\W)之间的边界。

单词边界并不是一个字符,它的宽度是0。它并不是一个具体的字符,不表示一个具体字符。

如,字符串 I have a dream中。I是一个单词字符,I之后的空格是一个非单词字符,在这两者之间就有一个边界。同理,在单词字符I之前也有一个边界,在最后一个单词dream后也有一个单词边界。

六、行边界:line boundaries

每一个文本块都会被分解成一行或者多行,行与行之间是以换行符分隔的。

行边界包括:行起始边界(^)  +  行结束边界($)。

两个边界都不是字符,宽度为0。

行起始边界即每一行的第一个字符和它之前的换行符之间的边界。

行结束边界即每一行的最后一个字符和它之后的换行符之间的边界。

即一个文本块的构成如下:

(行起始边界) + 行 +(行结束边界) +

换行符 +

(行起始边界) + 行 +(行结束边界) +

换行符 +

...

(行起始边界) + 行 +(行结束边界)

  • 正则表达式^a匹配的规则是:一个行起始边界,并且其后跟一个字符a。
  • 正则表达式b$的匹配规则是:找到一个字符b,并且其后跟一个行结束边界。
  • 正则表达式^ab$的匹配规则是:找到一个行起始边界,其后跟一个字符a,接着跟一个字符b,接着是一个行结束边界。
  • 正则表达式^$的匹配规则是:找到一个空行。

七、捕获组与替换

正则表达 (\w*)ility 表示找到一个以 ility 结尾的单词,捕获组1就是匹配了部分内容的\w*。比如,如果我们的文本中包含 accessibility ,捕获组1就是accessib。如果我们的文本只含 ility ,那么捕获组1就是空字符串。

引用捕获组(获取捕获取的值):\1   \2  \3  \4  (反斜杠开头,后跟组序号)

一个正则表达式中可以包含多个捕获组,捕获组之间也可以嵌套。捕获组的编号是从左至右按照左圆括号的顺序依次编号。如对于正则表达式:(\w+)  had  a  ( (\w+)  \w+),如果文本内容是 I  had  a  nice  day。则:

捕获组1 (\1) 是 I。

捕获组2 (\2) 是 nice day。

捕获组3 (\3) 是 nice。

捕获取0 (\0) :在一些实现中,所有正则表达式都默认有一个捕获组0,它是匹配正则表达式的整个文本:即捕获组0 是 I had a nice day。

对于正则表达式 a(\w*) :

如果文本是 a,则捕获组1 (\1)是 空白。

如果文本是 ad,则捕获组1 (\1)是  d。

如果文本是 avocado,则捕获组1 (\1)是 v,捕获组0 (\0) 是 avocado 整个文本。

在替换需求中,可以引用捕获组来作为替换后的文本。比如:将所有MM/DD/YY格式的日期,替换成YYYY-MM-DD格式的。

查找MM/DD/YY格式的日期:\d\d/\d\d/\d\d,

分组,设置捕获组:(\d\d)/(\d\d)/(\d\d)

引用捕获组进行替换(用反斜杠加捕获组号来引用捕获组):20\3-\1-\2。

例如,如果日期是03/04/05,则捕获组1是03、捕获组2是04、捕获组3是05,被替换后的日期是:2005-03-04

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值