构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。
正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。
正则达式有集中分类:
一、普通字符
1.[ABC]匹配[...]中的所有字符
2.[^ABC]匹配除了...中字符所有的字符
小结:在大括号中用^表示非,用在表达式最前面表示字符串的开始,这里有坑!!!
3.[A-Z]匹配所有大写字母
[a-z]匹配所有小写字母
4.\n \r 换行
5.\s 匹配所有空白符,包括换行
\S 匹配所有非空白符,不包括换行
6.\w 匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
二、非打印字符
这里的我们不太常用,用到了再来查吧!
三、特殊字符
许多元字符要求在试图匹配它们时特别对待。若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符\ 放在它们前面。
举例:+表示匹配一个或者多个,至少一个,如果要查找的字符串中的+号,则需要对+进行转义,变成\+
四、限定符
1.+表示匹配一个或者多个,至少一个,等价于{1,}
[0-9]匹配单个数字
[0-9]+匹配多个数字
2.*表示匹配一个或者多个,可以没有,等价于{0,}
3.?表示匹配最多一个,等价于{0,1}
小结:* 和 + 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配。
通过在 *、+ 或 ? 限定符之后放置 ?,该表达式从"贪婪"表达式转换为"非贪婪"表达式或者最小匹配。
4.{n}n 是一个非负整数。匹配确定的 n 次。
5.{n,}n 是一个非负整数。至少匹配n 次。
6.{n,m}m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。
小结:上面描述了花括号的三种不同的用法。一个数字 {x} 的意思是前面的字符只出现x次 ;一个数字加逗号 {x,} 的意思是前面的内容出现x或更多的次数 ;两个数字用逗号分隔的数字 {x,y} 表示 前面的内容至少出现x次,但不超过y次。
五、定位符
1.^匹配输入字符串的开始位置
2.$匹配输入字符串的结束位置
如果一个模式不包括^和$,那么它与任何包含该模式的字符串匹配
注意:此处有坑!!!
举例:匹配1~60的数字
如果我们加了开始和结束/^([1-9]|[1-5][0-9]|60)$,那么,会正常匹配(1~60之内的数字能找到匹配;1~60之外的数字没有匹配)

但是,如果我们没有加开始或者结束,他可就不是我们想要的样子了哟!
3.\b 描述单词的前或后边界
4.\B 表示非单词边界
六、选择
用圆括号 () 将所有选择项括起来,相邻的选择项之间用 | 分隔。
但用圆括号会有一个副作用,使相关的匹配会被缓存,此时可用 ?: 放在第一个选项前来消除这种副作用。
其中 ?: 是非捕获元之一,还有两个非捕获元是 ?= 和 ?!,这两个还有更多的含义,前者为正向预查,在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串,后者为负向预查,在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串。
?=、?<=、?!、?<! 的使用区别:
exp1(?=exp2):查找 exp2 前面的 exp1。
(?<=exp2)exp1:查找 exp2 后面的 exp1。
exp1(?!exp2):查找后面不是 exp2 的 exp1。
(?<!exp2)exp1:查找前面不是 exp2 的 exp1。
这里挺有意思,值得研究一下,小编暂时还是懵的,有研究过的小伙伴滴滴呀!
七、反向引用
这里讲的也是上面的?:、?= 或 ?!,主要用来提供查找文本中两个相同的相邻的单词匹配能力
学了这么多了,改上手试试了(底下附答案,不要提前偷看哦!):
1.38~156
2.数字字母和&组合,最短8位,最长32位的字符
3."Is is the cost of of gasoline going up up"经过\b([a-z]+) \1\b是什么?如果/\b([a-z]+) \1\b/ig结果是什么?
1.^(3[8-9]|[4-9]\d|1[0-4]\d|15[0-6])$
解析:^开始 $结束
3[8-9]:38~39
[4-9]\d: 相当于[4-9][0-9] 40~99
1[0-4]\d: 相当于1[0-4][0-9] 100~149
15[0-6]:150~156
整合到一起就是38~156
2.^[a-zA-Z0-9\&]{8,32}$
解析:
[A-Z]:匹配所有大写字母
[a-z]:匹配所有小写字母
[0-9]:匹配一个数字字符。等价于\d。
\&:特殊字符&匹配加\转义
{8,32}字符长度为8~32
3.of of,up up Is is,of of,up up
\b \b :单词的前后边界
[a-z]+: a-z的至少一个字母
\1:这个这个这个不是很理解
(网上查到的:配合()使用,如果()后出现\1表示第一个小括号中要匹配的内容,\2表示第二个,\0表示整个表达式)
i:不区分大小写
g:全局匹配
啊哦,小编在学正则表达式的时候遇到了几个问题,已经贴心的标成了蓝色字体,懂的小可爱欢迎指教哦!