先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Golang全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注go)
正文
可以看到,我们列举的8组密码,都得到了验证,说明我们的方法是OK的。
但这样一个密码设置规则校验,我们就差不多写近 30 行的代码,是不是感觉有点累赘了呢?明明规则很简单,代码量却写了这么多,有没有什么方法可以简化我们的代码呢?当然有!于是,这时就可以让我们今天的主角正则表达式出场了。
下面,则是具有相同校验功能,基于正则表达式的验证方法:
/**
- 通过正则表达式校验用户密码是否满足设置规则
- @param password 用户输入的密码
- @return true-满足;false-不满足
/
public static boolean checkPasswordByRegex(String password) {
return Pattern.matches("^(?=.[0-9])(?=.[a-z])(?=.[A-Z])(?=.[@#S%*_\-+=:.?])[A-Za-z0-9@#S%_\-+=:.?]{8,20}$", password);
}
那么它写得到底对不对呢?于是,我们可以通过上面的示例数据,继续调用该方法来进行验证:
通过结果我们可以看到,他也是符合我们预期的。于是我们发现,在不用正则表达式的时候,我们的代码量近30行,而使用了正则表达式,代码就浓缩为了1行,也就是说,使用正则表达式时可以简化我们的代码。
但同时我们也可知,正则表达式具有一定的学习成本,如果你不懂正则表达式,那么你看它可能就是一头雾水,如果出了问题,更也就无从下手去修改它了。
所以,学会正则表达式还是有必要的,至少以后你的同事写出来后,不会在脑子里出现 “这是写的啥玩意儿啊?怎么我看不懂” 的想法。
正则表达式
什么是正则表达式?通过上面的案例大家可能多少有点了解了。是的,他就是通过一行字符串,来描述一定的规则(如下图箭头所指红框处)。
命名规范
正则表达式的英文为 Regular Expression,所以我们通常采用这两个单词的首几个字母合在一起,把正则表达式相关的变量名定义为 regexp(单数) 或 regexps(复数) 。
比如:
又比如,在 Java 的 String 类中,有几个相关替换的方法,它也是支持正则表达式的,他的参数命名也是 regex 。
结构组成
正则表达式通常由一些普通字符,以及一些元字符组成。
普通字符:就是本身作为一个字符时,它不具有其他含义,像我们常用的大小写字母和数字。
元字符:就是除了本身作为一个字符外,他还可以表达其他含义(下图是部分元字符节选)。
其实,我们学习正则表达式,大部分就是基于元字符的学习。
用途场景
学习了正则表达式,我们可以有哪些用途场景呢?
(1)做字符串的规则验证(比如前面的案例引入中,我们可以通过正则表达式来验证一个密码是否符合规则)。
(2)做字符串的替换(比如将一个字符串中所有的大小写字母去掉,或者替换为指定符号)。
(3)提取字符串中所需要的字符(比如一个字符串中所有的数字提取出来,组成一个新的字符串)。
Java中的正则校验
正则表达式主要用途就是校验字符串,那么在Java中,只需要通过下面这个方法即可进行校验。
boolean result = Pattern.matches(regex, input);
其中:
regex 是我们需要写的正则表达式校验规则;
input 是我们待校验的字符串;
返回的 result 就是我们校验的结果,当为 true 的时候,表示校验通过,当为 false 的时候,则表示校验不通过。
正则元字符
正则:普通字符
当我们的正则表达式为一串普通字符(不包含元字符)时,校验字符串只有和正则一致时,才会校验通过。
具体效果如下:
说明:后面例子为节省篇幅,不显得累赘,就不再贴代码,只贴校验结果。
正则:\d
\d 表示一个数字。
如:
aaa\d: 表示验证的字符串后面必须以 aaa 开头,且以一个数字结尾。
aaa\dbbb:aaa和bbb中间有一个数字
aaa\d\d:aaa后面跟2个数字
注意:在Java定义的正则里,由于一个\表示的是字符串转义,因此在Java定义带有\的元字符时,还需要多写一个\,即\,至于其他语言,自己可查阅相关资料进行了解。
正则:\D
\D 表示一个非数字,它和上面 \d 的意思恰好相反。
如:
\D\D\D: 则表示一个长度为3,不包含数字的字符串。
111\D222:则表示111和222中间,必须包含一个非数字。
正则:\w
\w 表示一个字母(大小写均可)、数字,或下划线。
如:
12\w45:则表示12和45中间必须是一个字母,数字,或下划线。
正则:\W
\W 与 \w 相反,表示这个位置的字符既不是字母、数字,也不是下划线。
也就是:特殊符号(除下划线),或者空格等满足。
如:
12\w45:则表示12和45中间是一个非字母,非数字,或非下划线。
正则:\s
\s 表示匹配一个看不见的符号,即空格或制表符(Tab键)
如:
88\s99:则表示88和99中间须是一个空格或制表符。
(由于我的编辑器设置了1个制表符替换为4个空格,所以这里就不列举制表符情况了)
正则:\S
\S 与 \s 相反,表示一个可以看得见的符号。
如:
88\S99:则表示88和99中间须有一个看得见的符号。
正则:.
. (小数点) 则表示“\n”和"\r"之外的任何单个字符。
如:
… :则表示任意四个字符
正则:|
| (竖线) 则表示或的关系,表示检测的字符串须满足其中一个时,才符合条件。
如:
aa|bb|cc:则表示输入的字符串须是aa,或bb,或cc其中的一个。
注意,如果我们或者关系的前后还有其它字符时,需要用()将他们包裹起来。
如:
xx(aa|bb|cc)yy:则表示输入的字符串须是xx开头,yy结尾,且中间是aa,或bb,或cc其中的一个。
正则:[abc]
[ ] 表示匹配其中任意一个字符。
如:
a[bcd]e:则表示a和e的中间须是b,或c,或d其中的一个
注意:用 | 表示其中之一,他可以是字符,也可以是字符串。而只用中括号时,则只表示其中一个字符。
正则:[^abc]
[^ ] 表示不与中括号里的任意字符匹配。
如:
a[^bcd]e:则表示a和e的中间除b,c,d这三个字符外,其他的字符都满足。
正则:[a-z]
[值1-值2] 则表示值1到值2中间的所有字符都满足(包括值1和值2)。常用该正则来表示大小写字母范围,数字范围。
如:
a[b-d]e:等同于 a[bcd]e,因为 b-d 其实就是b,c,d三个数。
a[0-9]e:则表示a和e中间是一个数字,等同于 a\de(前面说过\d表示一个数字)
正则:[^a-z]
[^值1-值2] 则表示除值1和值2之外的所有字符,都可以满足。
如:
a[^1-3]e:则表示a和e中间的字符,只要不是1,2,3,则都满足。
正则:\num
这里的num指number,也就是数字,当\后面跟数字,表示匹配第几个括号中的结果。
比如:现在有 abcd 字符串,当我们用小括号把 c 包裹起来后,然后在字符串后面写上 \1,即 ab©d\1,则这里的 \1 就指 c,因为 \1 表示第1个小括号中的结果。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img.cn/494eee31a19649db8aa99789dab350f0.png)
正则:\num
这里的num指number,也就是数字,当\后面跟数字,表示匹配第几个括号中的结果。
比如:现在有 abcd 字符串,当我们用小括号把 c 包裹起来后,然后在字符串后面写上 \1,即 ab©d\1,则这里的 \1 就指 c,因为 \1 表示第1个小括号中的结果。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
[外链图片转存中…(img-CXsoaccQ-1713185068245)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!