上面是一个正则表达式的例子,要学会这个学习正则表达式有几步呢?两步,1 看看基础规则。2 使用典型案例来学习,有问题返回步骤1。
1 基础规则
正则表达式基本上是线性从头到后的。规则如下:
来自:https://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
要注意区别的是+和*。+是至少1次,*是可以0次。
另外要注意区分[] () {}:
[]是指代一个字符,如果[]+则表示连续出现,比如说[a,b]+就会匹配连续出现的a或者b;()是一组字符;{}表示的是重复次数。
2 练习
判断域名:
^(http|https|ftp):\/\/([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})(\/\S*)?$
^是开始,(http|https|ftp)表示在三个协议头里面,:\/\/是分隔符。([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})表示域名部分,其中[a-zA-Z0-9.-]表示匹配字母数字和字符.和-。后面[a-zA-Z]{2,}是至少两个字母的顶级域名,(\/\S*)?表示后面的路径,?表示是可选的。$表示结束。
判断邮箱:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
^是开始,[a-zA-Z0-9._%+-]+表示允许字母数字和字符._%+-,后面的+表示允许多个。[a-zA-Z0-9.-]+这个和前面类似,[a-zA-Z]{2,}这个也是至少两个字符的顶级域名。$表示结束。
判断手机号:
^[1][3,4,5,6,7,8,9][0-9]{9}$
开始结尾就不说了,第一个字符必须是1,第二个字符必须是3456789中一个,后面有9个数字。数字可以用[0-9],用\d也可以。
中国大陆地区身份证号码:
^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])\d{3}[\dX]$
第一个数字不为0,接着5个数字,后面必须是19或者20,因为只可能这两个年份出生的(除非125岁以上。。。)。后面两个数字,(0[1-9]|1[0-2])表示f分组,范围是0~12,就是月份。后面的日期是一样的写法。[\dX]表示校验码。可以是数字或者X。
包含大小写字母、数字、特称字符,至少8个字符,最多30个字符的密码
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()-_+=])[a-zA-Z\d!@#$%^&*()-_+=]{8,30}$
(?=.*[a-z]),使用正向预查来确保密码中至少包含一个小写字母。
其它类似。?=的说明可以看上面的表。
判断字符串只包含中文和数字
^[\u4e00-\u9fa5\d]+$
[\u4e00-\u9fa5]是中文Unicode的范围,\d是数字。
字符串是否包含刘备
^刘[\u4e00-\u9fa5]*备$
和上面的差不多。
3 小总结
综上可以看到,在一些复杂条件的判断,正则表达式还是很有优势。写代码去判断真的要搞半天,有些复杂的估计可以进leetcode了。网上很多在线验证正则表达式的地方,比如菜鸟,上去写两句一下就明白了。
最后,所有的表达式其实可以用GPT生成,也不用自己去写。。。懂一些基本概念即可。