正则表达式学习笔记

正则表达式可以很方便地判断字符串格式,应用很广

使用

字符串.matches("正则表达式")

这里的正则表达式就是一个字符串

规则

字符类

  • [abc] 只能是a,b,c之一
  • [^abc]除了a,b,c以外的字符
  • [a-zA-Z]a到z,A到Z,闭区间
  • [a-d[m-p]] a到d,或m到p
  • [a-z&&[def]] a-z和def的交集
  • [a-z&&[^bc]] a-z和非bc的交集。等价于[ad-z]
  • [a-z&&[^m-p]] a-z和除了m-p的交集。等价于[a-lq-z]

预定义字符

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

\ 需要转义,变成\\

数量词

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

tricks

  • 匹配时忽略abc的大小写
String regex = "(?i)abc";
  • 匹配时忽略b的大小写
String regex = "a((?i)b)c";

练习

从左往右依次看

  1. 手机号码
String regex = "1[3-9]\\d{9}";
  1. 座机号码

例:020-2324242

格式:区号(以0开头,有3到4位)+可以有一位分隔符(-)+号码(第一位不能是0,后面任意,总长度5-10位)

String regex = "0\\d{2,3}-?[1-9]\\d{4-9}";
  1. 邮箱号码
String regex = "\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";
  1. 身份证严格匹配
String regex = "[1-9]\\d{5}(18|19|20)\\d{2}(0\\d|1[012])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dXx]"
img_show