一、正则表达式概述

1、什么是正则表达式

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

举个例子:校验一个qq号码是否正确,要求这个号码必须是6-12位之内,且全部为数字

  1. package com.key.d14_packeg_01.zhengze;
  2. public class Regex {
  3. public static void main(String[] args) {
  4. String str = "578098429";
  5. System.out.println(checkQQ(str));
  6. System.out.println("-------------------");
  7. //用正则进行判断
  8. String str1 = "1230485";
  9. System.out.println(check_zhengze(str1));
  10. }
  11. /**
  12. * 判断QQ是否符合要求
  13. * (1)长度为6-12位
  14. * (2)全部为数字
  15. * @param qq
  16. * @return
  17. */
  18. public static boolean checkQQ(String qq) {
  19. // 1、判断QQ号码是否为空,且长度是否满足要求
  20. if (qq == null || qq.length() > 12 || qq.length() < 6) {
  21. return false;
  22. }
  23. // 2、判断是否都为数字
  24. for (int i = 0; i < qq.length(); i++) {
  25. //取每一位的字符,chr
  26. char c = qq.charAt(i);
  27. if (c < '0' || c > '9') {
  28. return false;
  29. }
  30. }
  31. return true;
  32. }
  33. public static boolean check_zhengze(String qq){
  34. return qq != null && qq.matches("\\d{6,12}");
  35. }
  36. }

2、匹配规则

image.png
举个小例子:

  1. package com.key.d14_packeg_01.zhengze;
  2. public class Regex1 {
  3. public static void main(String[] args) {
  4. /**
  5. * 正则表达式匹配一串字符
  6. */
  7. System.out.println("fsldfcsdf897".matches("\\w{2,}"));
  8. /**
  9. * 匹配4位验证码,不能有"_"
  10. */
  11. System.out.println("34VC".matches("[\\w&&[^_]]{4}"));
  12. //也可以用另一种方式
  13. System.out.println("34VC".matches("[0-9a-zA-Z]{4}"));
  14. }
  15. }

正则表达式实战

image.png

  1. package com.key.d14_packeg_01.zhengze;
  2. import java.util.Scanner;
  3. public class RegexDemo {
  4. public static void main(String[] args) {
  5. /**
  6. * 1、校验手机号是否符合要求:11位,纯数字,必须是1开头,且第二位是3-9中的数字
  7. */
  8. Scanner sc1 = new Scanner(System.in);
  9. System.out.println("请输入手机号:");
  10. String phone = sc1.next();
  11. if (phone.matches("1[3-9]\\d{9}")) {
  12. System.out.println("输入的手机号正确");
  13. }else {
  14. System.out.println("输入的手机号有误!");
  15. }
  16. /**
  17. * 2、校验邮箱是否符合要求
  18. * --xxxx@q.com
  19. * --xzzz@sangfor.com.cn
  20. */
  21. Scanner sc2 = new Scanner(System.in);
  22. System.out.println("请输入邮箱:");
  23. String email = sc2.next();
  24. if (email.matches("[\\w&&[^_]]{1,20}@[\\w&&[^_]]{2,10}(\\.[\\w&&[^_]]{2,10}){1,2}")) { //[\w&&[^_]]{1,20}@[\w&&[^_]]{2,10}\.com
  25. /**
  26. * 为什么正则内的.之前要加两个'\'???
  27. * 因为.在正则匹配中表示匹配任意字符,为了告诉JAVA这就是个.所以要进行转义,将'.'改为'\.'又因为要告诉JAVA这个\就是个\所以要将'\.'改为'\\.'
  28. */
  29. System.out.println("输入的邮箱正确");
  30. }else {
  31. System.out.println("输入的邮箱错误!");
  32. }
  33. }
  34. }

正则表达式在字符串方法中的应用

image.png

  • 用split()进行字符串分割

image.png

  • 用replaceAll进行字符串替换

image.png

利用正则表达式爬取信息(利用于爬虫)

image.png
image.png