正则表达式是一种描述字符串集合的方法,它是以字符串集中各字符串的共有特征为依据的。正则表达式可以用于探索、编辑或者操作文本和数据。它超出了java程序设计语言的标准语法,因此有必要去学习特定的语法来构建正则表达式。正则表达式的变化是复杂的,一旦你理解了他们是如何被构造的话,你就能解析或者构建任意的正则表达式了。

在JDK1.3以及之前的JDK版本中并没有包含正则表达式的类,如果要在JAVA中使用正则表达式则必须使用第三方提供的正则表达式库。而在JDK1.4开始提供了支持正则表达式API,他们位于java.util.regex包中,由于已经有了标准API,所以本书将会用java.util.regex进行正则表达式的相关操作。

java.util.regex包主要由三个类组成:Pattern、Matcher和PatternSyntaxException。Pattern对象表示一个已经编译的正则表达式,Pattern类没有提供公共的构造方法,要构建一个模式,首先必须调用公共的静态complie方法,它将返回一个Pattern对象,这个方法接受正则表达式作为第一个参数。Matcher是一个靠着输入的字符串来解析这个模式和完成匹配操作的对象,与Pattern相似,Matcher也没有定义公共的构造方法,需要通过调用Pattern对象的matcher方法来获得一个Matcher对象。PatternSyntaxException对象是一个未检查异常,指示了正则表达式中的一个错误语法。

1、常见的正则表达式中元字符的含义:


元字符
说明
       . 匹配任何单个字符。例如正则表达式“b.g”能匹配如下字符串:“big”、“bug”、“b g”,但是不匹配“buug”。
      $ 匹配行结束符。例如正则表达式“EJB$”能够匹配字符串“I like EJB”的末尾,但是不能匹配字符串“J2EE Without EJBs!”。 
      ^ 匹配一行的开始。例如正则表达式“^Spring”能够匹配字符串“Spring is a J2EE framework”的开始,但是不能匹配
“I use Spring in my project”。
      * 匹配0至多个在它之前的字符。例如正则表达式“zo*”能匹配“z”以及“zoo”;正则表达式“.*”意味着能够匹配任意字符串。
      / 转义符,用来将元字符当作普通的字符来进行匹配。例如正则表达式/$被用来匹配美元符号,而不是行尾;
正则表达式/.用来匹配点字符,而不是任何字符的通配符。
      [] 匹配括号中的任何一个字符。例如正则表达式“b[aui]g”匹配bug、big和bug,但是不匹配beg。可以在括号中使用连字符“-”来
指定字符的区间来简化表示,例如正则表达式[0-9]可以匹配任何数字字符,这样正则表达式“a[]c”就可以匹配“a0c”、“a1c”、
“a2c”等字符串;还可以制定多个区间,例如“[A-Za-z]”可以匹配任何大小写字母。还有一个相配合使用的元字符“^”,用在这
里并不像前边的那个“^”一样表示匹配行开始,而是表示“排除”,要想匹配除了指定区间之外的字符,就可以在左边的括号
和第一个字符之间使用^字符,例如“[^163A-Z]”将能偶匹配除了1、6、3和所有大写字母之外的任何字符。
      () 将 () 之间括起来的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域,这个元字符在字符串
提取的时候非常有用。
      | 将两个匹配条件进行逻辑“或”运算。'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配"zood" 或 "food"。
     + 匹配前面的子表达式一次或多次。例如正则表达式9+匹配9、99、999等。
     ? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。此元字符还有另外一个用途,
就是表示非贪婪模式匹配,后边将有介绍
    {n} 匹配确定的 n 次。例如,“e{2}”不能匹配“bed”中的“d”,但是能匹配“seed”中的两个“e”。
    {n,} 至少匹配n次。例如,“e{2,}”不能匹配“bed”中的“e”,但能匹配“seeeeeeeed”中的所有“e”。
   {n,m} 最少匹配 n 次且最多匹配 m 次。“e{1,3}”将匹配“seeeeeeeed”中的前三个“e”。
   其他
/t:制表符,等同于/u0009
/n:换行符,等同于/u000A
/d:代表一个数字,等同于[0-9]
/D:代表非数字,等同于[^0-9]
/s:代表换行符、Tab制表符等空白字符
/S:代表非空白字符
/w:字母字符,等同于[a-zA-Z_0-9]
/W:非字母字符,等同于[^/w]
例如,在前面社会安全号码的例子中,所有出现“[0-9]”的地方我们都可以使用“/d”。
[abc] a, b 或 c(简单类)
[^abc] 除 a, b 或 c 之外的任意字符(取反)
[a-zA-Z] a 到 z,或 A 到 Z,包括(范围)
[a-d[m-p]] a 到 d,或 m 到 p:[a-dm-p](并集)
[a-z&&[def]] d,e 或 f(交集)
[a-z&&[^bc]] 除 b 和 c 之外的 a 到 z 字符:[ad-z](差集)
[a-z&&[^m-p]] a 到 z,并且不包括 m 到 p:[a-lq-z](差集)

2、正则表达式校验密码实战

密码校验规则如下:

1.必须包含数字、字母、特殊字符三种

2.长度至少8位

3.不能包含3位及以上相同字符的重复(hhh123@jixxx)

4.不能包含3位及以上字符组合的重复(123q123c123)

5.不能包含3位以上的正序及逆序连续字符(123#wete#321)

6.不能包含空格、制表符、换页符等空白字符

7.支持特殊字符范围:^$./,;:'!@#%&*|?+(){}[]

按照需求进行正则表达式拆解

规则1&&8:

str.matches("^.*[a-zA-Z]+.*$") && str.matches("^.*[0-9]+.*$")
&& str.matches("^.*[/^/$/.//,;:'!@#%&/*/|/?/+/(/)/[/]/{/}]+.*$")

规则2:

str.matches("^.{8,}$")

规则3:

!str.matches("^.*(.)\\1{2,}+.*$")

规则4:

!str.matches("^.*(.{3})(.*)\\1+.*$")

规则5&&7:

javaImpl:
first change str to char[]
then  for  Math.abs(cc[0] - cc[1]) == 1 && (cc[0] - cc[1]) == (cc[1] - cc[2])
如果想去掉特殊字符的连续:
first str.split("[^\\w]+")  as str1[]
then for  str1[]
then for  str1[i]     javaImpl:

规则6:

!str.matches("^.*[\\s]+.*$")

JAVA中校验密码的正则表达式相关推荐

  1. java正则校验密码 长度不少于8位且至少包含大写字母、小写字母、数字和特殊符号中的四种组合 或者 其中任意三种组合

    java正则校验密码必须是包含大小写字母.数字.特殊符号的8位以上四种组合 或者 其中任意三种组合 一.排除法和详细解释 1.排除大写字母.小写字母.数字.特殊符号中1种组合.2种组合.3种组合,那么 ...

  2. java正则校验密码

    java正则校验密码必须是包含大小写字母.数字.特殊符号的8位以上四种组合 或者 其中任意三种组合 一.排除法和详细解释 1.排除大写字母.小写字母.数字.特殊符号中1种组合.2种组合.3种组合,那么 ...

  3. java打开密码pdf,在Java中使用密码解密PDF文档

    在Java中使用密码解密PDF文档 文档加密是确保企业与其外部客户之间安全地传递信息的最常用方法之一.所有PDF文件都提供了加密功能,可确保任何试图拦截信息的人都可以在没有密码的情况下打开它,密码应在 ...

  4. 如何在Java中验证电话号码(正则表达式+ Google libphonenumber)

    关于如何在不同国家(例如美国,美国)使用Java验证电话号码的快速指南. 带有正则表达式和Google libphonenumber API的示例程序. 1.简介 在本教程中,我们将学习如何在java ...

  5. 如何在Java中验证电话号码(正则表达式)

    Java中的正则表达式模式始终是验证用户电话号码的最佳方法. 在这里,我提供了一个正则表达式模式来确定电话号码的格式是否正确,该模式强制以3位数字开头,后跟一个"-",最后是7位数 ...

  6. Java正则校验密码至少包含:字母数字特殊符号中的2种

    一.语法 字符 说明 \ 将下一字符标记为特殊字符.文本.反向引用或八进制转义符.例如, n匹配字符 n.\n 匹配换行符.序列 \\\\ 匹配 \\ ,\\( 匹配 (. ^ 匹配输入字符串开始的位 ...

  7. java正则校验-密码至少要由包括大小写字母、数字、标点符号的其中两项,共计8-16位编码组成

    很多朋友在问正则组合校验的问题,但网上那些大都是不对的,现贴上我在项目中写的部分源码供大家取用. String regex = "^(?![A-Za-z]+$)(?!\\d+$)(?![\\ ...

  8. java中修改密码_java怎样修改用户名密码?

    展开全部 package changepassword; import java.util.Scanner; public class Administrator{ String name;//姓名 ...

  9. java中修改密码_java中用户密码加密时增加和修改的代码

    建一个MD5.java类 package util; /************************************************ MD5 算法的Java Bean Last M ...

最新文章

  1. 别人家的团队怎么用RabbitMQ:我总结的5点规范
  2. linux 系统相关服务解释
  3. Jenkins持续集成环境之凭证管理
  4. matlab radn,如何用matlab编写randn函数?
  5. 武大计算机几天出录取结果,录取大概要几天 多久录取结果出来
  6. PHP钥匙导航源码-社区导航双端自适应Typecho模板
  7. STM8 ADC转换模式-------连续模式
  8. 刷脸AI供应商下调业绩预期,苹果股价应声跌掉一个小米
  9. git管理工具使用-本地通过git命令拉取项目
  10. 下载超星或读秀图书时,怎么搞定完整书签?
  11. SVN忽略提交文件设置
  12. 药物临床试验数据递交FDA的规定
  13. C++网站如何实现短信验证码功能?
  14. 木马 --- 基本概念和分类
  15. linux如何在网页播放视频,Linux_网页媒体播放器代码详解,老式的播放器,新式播放器是在 - phpStudy...
  16. python中的eval函数的使用详解
  17. 监听Home键和返回键
  18. Robotstudio 获取机器人D-H参数
  19. MATLAB----Roberts锐化滤波器
  20. 有序数组合并及等长数组对位穿插

热门文章

  1. matlab引用表格命令,如何用matlab引用excel表格数据-matlab如何从excel表格中读取数据?...
  2. 基于上证金融数据的情感分析和走势预测 代码+数据
  3. 2022-2027年中国防水涂料行业发展监测及投资战略研究报告
  4. ORACLE--知识点②--函数
  5. 观《史记·项羽本纪》有感
  6. 护卫队(动态规划+ST表)
  7. MySQL集群解决方案
  8. Nids.h详细注释
  9. cifar-100数据集转成图片格式
  10. 《Android 应用案例开发大全(第3版)》——第2章,第2.1节壁纸的背景及功能概述...