正则表达式

     最近写小工具多次用到正则表达式,由于没有系统地学习过,每次百度现学现卖都挺费劲。下面好好地梳理一下正则表达式的知识。

     首先,什么是正则表达式呢?它是一种特殊的字符串模式,用于匹配一组字符串。说白了就是用正则表达式制定一个规则,按照规则去寻找符合要求的字符串。

1. 正则元字符

     元字符是构造正则表达式的一种基本元素,我们来记几个常用的元字符。

元字符 说明
^ 匹配字符串的开始
$ 匹配字符串的结束
. 匹配除换行符外的任意字符
w 匹配数字、字母、下划线、汉字
d 匹配任意的数字
s 匹配任意的空白符
 匹配字符串的开始或结束
[abc] 匹配方括号中的字符组

2. 几种反义

写法很简单,改成大写就行了,意思与原来相反。

反义字符 说明
W

匹配除数字、字母、下划线、汉字以外的字符,即特殊字符

S 匹配任意不是空白符的字符
D 匹配不是数字的字符
B 匹配不是开始和结束的位置
[^abc] 匹配除了abc之外的字符

3. 量词

  * (贪婪):重复0次或更多

  +(占用):重复1次或更多

  ?(懒惰):匹配得越少越好,0次或1次

  {n}:重复N次,比如"a{3}",即取"aaa"

  {n, m}:重复n-m次,比如a{3, 4},即取"aaa"或"aaaa"

  {n,}:重复n次或更多次,无上限

4. 懒惰限定符

  *?   重复任意次,但尽可能少重复 

      如 "acbacb"  正则  "a.*?b" 只会取到第一个"acb" 原本可以全部取到但加了限定符后,只会匹配尽可能少的字符 ,而"acbacb"最少字符的结果就是"acb" 

  +?  重复1次或更多次,但尽可能少重复

     与上面一样,只是至少要重复1次

  ??  重复0次或1次,但尽可能少重复

      如 "aaacb" 正则 "a.??b" 只会取到最后的三个字符"acb"

  {n,m}?  重复n到m次,但尽可能少重复

          如 "aaaaaaaa"  正则 "a{0,m}" 因为最少是0次所以取到结果为空

  {n,}?    重复n次以上,但尽可能少重复

          如 "aaaaaaa"  正则 "a{1,}" 最少是1次所以取到结果为 "a"

原文地址:https://www.cnblogs.com/yukifun/p/12969193.html