一文完全看懂正则表达式

服务器

  案例引入

  在说正则表达式之前我们不妨先看一个场景。

  当你第一次访问一个网站,注册账号的时候会遇到如下的情况。当你设置密码的时候网站会提示一些规则,你按照规则设置成功后就完成了注册。

  具体实现

  上面的例子中涉及两个规则:

  (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中间须有一个看得见的符号。

  由于篇幅有限,先介绍几个常用的表达式,剩下的会在以后更新出来,希望对大家有帮助。

标签: 服务器