正则表达式


字符组 []: 描述的是一个位置上能出现的所有可能性

接受范围,可以描述多个范围,连着写就可以了

[abc] 一个中括号只表示一个字符位置
匹配a或b或c

[0-9] 根据 ASCII 进行范围的比对
[a-z]
[A-Z]
①大写字符A到Z的ASCII代码分别是065到090,字符加一,代码加一
②小写字符a到z的ASCII代码分别是097到122,依旧是字符加一,代码加一

[a-zA-Z] 大小写
[0-9a-zA-Z] 数字大小写

在正则表达式中能够帮助我们表示匹配的内容的符号都是正则中的 元字符
[0-9] ==> d 也可以匹配一位任意数字 digit
[0-9a-zA-Z] ==> w 表示数字,字母,下划线 word
空白(空格|tab|enter) ==> s 表示所有空白:空格,回车,tab
空格 ==> 看不见space
tab ==>
enter ==>

元字符 -- 匹配规则
[] 字符组 : 描述的是一个位置上能出现的所有可能性
[^] 所有的非字符组
d 也可以匹配一位任意数字 digit
w 表示数字,字母,下划线 word
s 空白
tab
enter
D 非数字
W 非数字,字母,下划线
S 非空白
[dD] , [wW] ,[sS] 匹配所有
[^d] 表示所有非数字的所有
. 匹配除换行符之外的所有
^ 匹配一个字符串的开始
$ 匹配一个字符串的结尾
| a表达式|b表达式 匹配a或者b表达式中的内容,如果a匹配成功了,不会继续匹配b表达式了,
所以如果两个规则有重叠部分,总是把长的放在前面

() 分组 1.约束:描述的内容的范围问题
例如:匹配 www.jd.com,www.mi.com,www.nba.com
www.(jd|mi|nba).com



记忆元字符
d w s D W S
[] [^] .
^ $
| ()


量词: 只能约束前一位的元字符.不能单独使用
{n} 匹配n次
{n,} 匹配至少n次
{n,m} 匹配至少n次,至多m次
? 匹配0个或1次 {0,1}
+ 匹配1次或者多次 {1,}
* 匹配0次或者多次 {0,}

用数轴记忆
? +
0---1------------------------>+∞
*

匹配0次
整数 d+
小数 d+.d+
整数或者小数 d+(.d+)
分组的作用 d+(.d+)?

11位手机号 1开头,第二位3-9
^1[3-9]d{9}&

贪婪匹配
在两次范围允许的情况下尽可能多的匹配内容
.*?x 表示任意字符,任意多次,但是遇到最后一个x才停下来

原因:回溯算法

非贪婪(惰性)匹配
.*?x 表示任意字符,任意多次,但是一旦遇到x就停下来
元字符 ?

转义符
原本有特殊意义的字符,到了表达它本身的意义的时候,需要转义
有一些特殊意义的内容,放在字符组中,回取消它的特殊意义
[.]
[().*+?] 所有的内容在字符组中会取消它的特殊意义
[a-c] -在字符组中表示范围,如果不需要表示范围,需要转义,或者放在字符组的最前面/最后面



星辰大海
原文地址:https://www.cnblogs.com/qiuyubai/p/12845743.html