正则表达式


正则表示

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

正则表达式初体验

  • 需求:假如现在要求校验一个qq号码是否正确,6位及20位之内,必须全部是数字
  • 先使用目前所学知识完成校验需求;然后体验一下正则表达式检验。

传统方法

public boolean checkQQ(String qq){
  // 1、判断qq号码的长度是否满足要求
  if(qq == null || qq.length() < 6 || qq.length() > 13 ){
    return false;
  }
  //2、判断qq中是否全部是数字,不是返回false
  for (int i= 0; i < qq.length(); i++) {
    // 获取每位字符
    char ch = qq.charAt(i)// 判断这个字符是否不是数字,不是数字直接返回false
    if(ch < "0" || ch > "9") {
      return false;
    }
  }
  return true;
}

正则方法

public boolean checkQQ(String qq){
  return qq != null && qq.matches("\\d(6,13)");
}

规则

字符类(默认匹配一个字符)

正则表达式 说明
[abc] 只能是a,b,或c
[^abc] 除了a,b.c之外的任何字符
[a-zA-Z] a到zA到Z,包括(范围)
[a-d[m-p]] a则d,或m通过p:([a-dm-p]联合)
[a-z&&[def]] d,e,或f(交集)
[a-z8&[^bc]] a到z,除了b和c:([ad-z]减法)
[a-z&&[^m-p]] a到z,除了m到p:([a-lq-z]减法)

预定义字符类(默认匹配一个字符)

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

贪婪的量词(配合匹配多个字符)

正则表达式 说明
x? x,一次或根本不
x* x,零次或多次
x+ x,一次或多次
x{n} x,正好n次
x{n,} x,至少n次
x{n,m} x,至少n次但不超过m次

常见案例

手机号格式

public boolean checkPhone(String phone){
  return phone.matches("1[3-9]\\d{9}");
}

邮箱格式

public boolean checkEmail(String email){
  return email.matches("\\w{1,30}@[a-zA-Z0-9]{2,20}(\\.[a-zA-Z0-9]{2,20}){1,2}");
}

座机

public boolean checkTel(String tel){
  return tel.matches("0\\d{2,6}-?\\d{5,20}");
}

正则表达式在字符串中的使用

方法名 说明
public String replaceAll(String regex,String newStr) 按照正则表达式匹配的内容进行替换
public String[] split(String regex) 按照正则表达式匹配的内容进行分割字符串,反回一个字符串数组。

爬取信息

public static void main(String[] args) {
  String rs = "电话023-43422424,或者联系邮箱suibian@qq.com,还有电话18762832633,8203232323"
  String regex = "(\\w{1,30}@[a-ZA-Z0-9]{2,20}(\\.[a-ZA-Z0-9]{2,20}(\\.[a-zA-Z0-9]{2,20}){1,2}"+
  "|"+
  "1[3-9]\\d{9}"+
  "|"+
  "0\\d{2,6}-?\\d{5,20}";
  Pattern pattern = Pattern.compile(regex);
  Matcher matcher = pattern.matcher(rs);
  while(matcher.find()) {
    String rs1= matcher.group();
    System.out.println(rs1);
  }
}  

文章作者: 泷少
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 泷少 !
评论
  目录