什么是正则表示?

正则表达式可以用一些规定的字符来制定规则,并用来校验数据格式的合法性。

匹配正则表达式的方法--由字符串对象提供

public boolean matches​(String regex);//判断是否匹配正则表达式,匹配返回true,不匹配返回false
比如,

System.out.println("3".matches("[0-9]"));

规则介绍

1. 预定义的字符类,默认匹配一个字符

.  任何字符
\d  一个数字: [0-9]
\D  非数字: [^0-9]
\s  一个空白字符: [ \t\n\x0B\f\r]
\S  非空白字符: [^\s]
\w  [a-zA-Z_0-9] 英文、数字、下划线
\W  [^\w] 一个非单词字符

举例说明如下

System.out.println("a".matches("\\d"));//false,a不是数字
System.out.println("3".matches("\\d"));//true,因为3是数字
System.out.println("333".matches("\\d"));//false,这个符号只能匹配一个字符,333是作为一个整体来匹配的,所以即使全是数字,也不会匹配成功。
System.out.println(" ".matches("\\s"));//true,空格,但不止空格,\\t,\\n,\\f,\\r,\\x0B等都可以匹配
System.out.println("1".matches("\\s"));//false,1不是空字符
System.out.println("1".matches("\\S"));//true,大S匹配非空字符
System.out.println("z".matches("\\w"));//true,z是一个字母
System.out.println("2".matches("\\w"));//true,2是数字
System.out.println("21".matches("\\w"));//false,只能匹配单个字符
System.out.println("你".matches("\\w"));//false,中文不在w的范围内
System.out.println("你".matches("\\W"));//true,只要不在w的范围内都成功匹配,但并不代表就能匹配中文了,中文有特殊的匹配机制。

2.字符类(示例)也是只能匹配一个字符

[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]] a到z,除了b和c:([ad-z]减法)

举例说明如下

//只能是a b c
System.out.println("a".matches("[abc]"));//true
System.out.println("z".matches("[abc]"));//false

//不能出现a  b  c
System.out.println("a".matches("[^abc]"));//false
System.out.println("z".matches("[^abc]"));//true
//除了b  c  之外的全部小写字母都可以出现
System.out.println("b".matches("[a-z&&[^bc]]"));//false
System.out.println("d".matches("[a-z&&[^bc]]"));//true

3.贪婪量词(配合单个字符匹配规则,决定本规则下出现字符的数量)

X?    X , 一次或根本不
X*    X,零次或多次
X+    X , 一次或多次
X {n}   X,正好n次
X {n, }  X,至少n次
X {n,m}  X,至少n但不超过m次

举例说明如下

//  以上正则匹配只能校验单个字符
//  校验密码
//  必须是数字  字母  下划线  至少6位
System.out.println("2442hshss".matches("\\w{6,}"));//true
System.out.println("244f".matches("\\w{6,}"));//false
//不带逗号,为正好6次
//验证码 必须是数字和字符 必须是4位
System.out.println("23dF".matches("[a-zA-Z0-9]{4}"));//true
System.out.println("23_F".matches("[a-zA-Z0-9]{4}"));//false
System.out.println("23dF".matches("[\\w&&[^_]]{4}"));//true,表示除了下划线以外的全部w集合的字符(\\w代表数字、字母、下划线)
System.out.println("23_F".matches("[\\w&&[^_]]{4}"));//false

注意事项与心得体会

  1. 不要乱加空格
  2. 像^_这种组合形式必须加上中括号,否则会匹配失败(变成只有4个下划线才能匹配成功了,个人理解,因为集合变成了w的集合与^和_的交集,就只有下划线了)
  3. 贪婪量词可以理解成,先设计好单个字符的规则之后,指定这个规则下,出现字符的数量。
  4. 带“-”的量词要看成一个整体,纯字母,纯带“-”的集合,可以直接在一起不留空格,但是&&后面的要加方括号。
  5. 在Java(和Markdown)中,由于字符串转义字符的特殊性,要用“\\”来表示“\”

文章版权:备长炭

本文链接:https://charcoalblog.top/index.php/archives/20/

转载请注明文章原始出处 !

添加新评论

百度已收录
返回顶部