案例引入
在说正则表达式之前我们不妨先看一个场景。
当你第一次访问一个网站,注册账号的时候会遇到如下的情况。当你设置密码的时候网站会提示一些规则,你按照规则设置成功后就完成了注册。
具体实现
上面的例子中涉及两个规则:
(1)规定密码长度,在6-16之间
(2)规定密码中必须包含数字、大小写字母和特殊字符
好了,现在我们转换身份,当你作为一个开发人员你会怎么实现这个功能。我想这个功能大家都有思路,那就是对输入的字符串进行遍历,每次遍历校验一个规则。首先校验字符串的长度,大于六位之后再校验字符串是否包含大写字母......这样做可以实现,但是我们能想到代码量肯定得几十行。那么有没有更简单的方法呢。
正则表达式
命名规范
那么什么是正则表达式?通过上面的案例大家可能多少有点了解了。是的,他就是通过一行字符串,来描述一定的规则。例如这样的。
^[a-zA-Z]\w{5,15}$
正则表达式的英文为 Regular Expression,所以我们通常采用这两个单词的首几个字母合在一起,把正则表达式相关的变量名定义为 regexp(单数) 或 regexps(复数) 。
结构组成
正则表达式通常由一些普通字符,以及一些元字符组成。
普通字符:就是本身作为一个字符时,它不具有其他含义,像我们常用的大小写字母和数字。
元字符:就是除了本身作为一个字符外,他还可以表达其他含义(下图是部分元字符节选)。
使用(以java为例)
boolean result = Pattern.matches(regex, input);
我们可以用上面的一行代码代替我们自己写的几十行的校验代码。
其中regex为正则表达式,input为我们需要校验的字符串,result为校验结果,怎么样是不是很简单。当我们了解了这些之后接下来正则表达式应该怎么写?
正则元字符
正则:普通字符
当我们的正则表达式为一串普通字符(不包含元字符)时,校验字符串只有和正则一致时,才会校验通过,这有点类似于equals方法。
如:aib2c3d表示目标字符串必须与正则一致才能校验通过(以下的截图案例都是以正则表达式为例子,通过校验则输出true,未通过则输出false)
正则:\d
\d 表示一个数字。
如:
aaa\d: 表示验证的字符串后面必须以 aaa 开头,且以一个数字结尾。
aaa\dbbb:aaa和bbb中间有一个数字
正则:\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中间须是一个空格或制表符。
正则:\S
\S 与 \s 相反,表示一个可以看得见的符号。
如:
88\S99:则表示88和99中间须有一个看得见的符号。
由于篇幅有限,先介绍几个常用的表达式,剩下的会在以后更新出来,希望对大家有帮助。