zoukankan      html  css  js  c++  java
  • 第十章、正则表达式

    第十章、正则表达式

    1. 基本概述

    由事先定义好的特殊字符以及这些特殊字符组成,组成一个“规则的表达式”,这是表达式用来
    对字符串进行过滤逻辑。
    

    2. 语法格式

    Java中正则表达式的语法格式:""
     
    JS中正则语法格式:/ /
    

    3. 运用场景

    1.检测用户输入的合法性
    2.检索、替换文本
    

    4. 正则表达的组成

    由普通字符和特殊字符(元字符)组成。
     
     
    字符
        x       字符 x  。  举例:'a'  表达式字符a
        \      反斜杠字符
        
          换行
        
          回车符
     
     
    字符类
        [abc]       表示abc中任意单个字符
        [^abc]      表示除了abc任意单个字符
        [a-zA-Z]    表示a到z A到Z中任意单个字符
        [0-9]       表示0-9任意单个字符
     
     
    预定义字符类
        .           除了换行符以外的任意单个字符。    我的就是.字符本身,怎么表示呢? .
        d          数字[0-9]
        D          非数字: [^0-9]
        w          数字字母下划线[a-zA-Z_0-9]
        W          非单词字符:[^w]
        s          空白字符
        S          非空白字符:[^s]
     
    边界匹配器
        ^           开头
        $           结尾
                  单词边界
     
     
    数量词
        X?          表示X可以出现一次或一次也没有
        X*          零次或多次
        X+          一次或多次
        X{n}        恰好 n 次
        X{n,}       至少 n 次
        X{n,m}      至少 n 次,但是不超过 m 次
     
     
    特殊符号
        ()          子字符集
        |           或
        &&          与
                   转义字符
     
        ?           设置括号内的选项是可选的
    

    5. 代码示例

    • 演示正则表达式用法

      package day15;
      
      import java.util.regex.Matcher;
      import java.util.regex.Pattern;
      
      /*
       * 演示正则表达式用法
       */
      public class Regex1 {
      
      	public static void main(String[] args) {
      		
      		// 1.编写正则表达式,匹配abc找那个任意三个字符
      		String reg1 = "[abc]$";
      		
      		// 2.编写正则表达式匹配abc中任意3个字符
      		
      		String reg2 = "[abc]{3}";
      		// 3.编写正则表达式匹配字母数字,要求出现0次或1次
      		String reg3 = "[0-9a-bA-Z]?";
      		// 4.编写正则表达式匹配字母数字下划线
      		String reg4 = "\w";
      		
      		// 出现一个问题  表达式写好了,该如何自定义字符串进行匹配呢?
      		
      		System.out.println("---------第一种匹配方式---------");
      		boolean bool = "adc".matches(reg1);
      		System.out.println(bool);
      		bool = "acc".matches(reg2);
      		System.out.println(bool);
      		
      		System.out.println("---------第二种匹配方式---------");
      		bool = Pattern.matches(reg3, "9");
      		System.out.println(bool);
      		
      		System.out.println("---------第三种匹配方式---------");
      		// compile(String regex)   将给定的正则表达式编译到模式中
      		
      		// 将给定的正则表达式编译到模式中
      		Pattern pattern = Pattern.compile(reg4);
      		// Matcher matcher(CharSequence input)  创建匹配给定输入与此模式的匹配器
      		
      		// 创建匹配给定输入与此模式的匹配器
      		Matcher matcher = pattern.matcher("6");
      		// 尝试将整个区域与模式匹配
      		bool = matcher.matches();
      		System.out.println(bool);
      	}
      }
      
    • 作业一

      package day15;
      
      /*
       * 1.验证用户名 字母开头4-6位,数字字母下划线
       * 2.手机号11位
       * 3.验证QQ号码        3-13位
       * 4.验证邮箱
       * 5.验证身份证
       * 6.验证用户2-4位汉字
       * 7.验证用户名		数字字母必须都包含
       */
      public class Regex2 {
      
      	public static void main(String[] args) {
      		// 1.验证用户名 字母开头4-6位,数字字母下划线
      		String reg1 = "^[a-zA-Z]\w{3,5}";
      		boolean bool = "sd_3".matches(reg1);
      		System.out.println(bool);
      		
      		System.out.println("----------------------");
      		// 2.手机号11位
      		String reg2 = "\d{11}";
      		bool = "15879680697".matches(reg2);
      		System.out.println(bool);
      		
      		System.out.println("----------------------");
      		// 3.验证QQ号码        3-13位
      		String reg3 = "\d{3,13}";
      		bool = "15879680697".matches(reg3);
      		System.out.println(bool);
      		
      		System.out.println("----------------------");
      		// 4.验证邮箱
      		String reg4 = "[a-zA-Z0-9]+@[a-zA-Z]+\.com";
      		bool = "158796df@qq.com".matches(reg4);
      		System.out.println(bool);
      		
      		System.out.println("----------------------");
      		// 5.验证身份证
      		String reg5 = "[0-9]{18}";
      		bool = "362401200003214417".matches(reg5);
      		System.out.println(bool);
      		
      		System.out.println("----------------------");
      		// 6.验证用户2-4位汉字
      		String reg6 = "[u4e00-u9fa5]{2,4}";
      		bool = "娃哈哈".matches(reg6);
      		System.out.println(bool);
      		
      		System.out.println("----------------------");
      		// 7.验证用户名		数字字母必须都包含
      		// ?![0-9]$     ?![a-zA-Z]$
      		String reg7 = "(?![0-9]+$)(?![a-zA-Z]+$)[0-9a-zA-Z]*";
      		bool = "asjfvf".matches(reg7);
      		System.out.println(bool);
      		
      		System.out.println("----------------------");
      		// 8.验证用户名		数字字母下划线必须都包含
      		// ?![0-9]$     ?![a-zA-Z]$
      		String reg8 = "(?![0-9]+$)(?![a-zA-Z]+$)(?![0-9a-zA-Z]+$)[0-9a-zA-Z_]*";
      		bool = "asjfv2_f".matches(reg8);
      		System.out.println(bool);
      	}
      }
      
    • 作业二

      package day15;
      
      import java.util.regex.Matcher;
      import java.util.regex.Pattern;
      
      /*
       * 获取功能
       * 		获取下面这个字符串中由三个字符组成的单词
       * 		q xue wan gaoji wo gei ni men jie shao dui xiang,ni men ji bu ji dong?
       */
      public class RegexCase {
      
      	public static void main(String[] args) {
      		// 定义字符串
      		String string = "q xue wan gaoji wo gei ni men jie shao dui xiang,ni men ji bu ji dong?";
      		
      		// 1.创建正则表达式撇三个字符组成的单词  \b:是边界符
      		String reg = "\b[a-zA-Z]{3}\b";
      		
      		Pattern compile = Pattern.compile(reg);
      		Matcher matcher = compile.matcher(string);
      		
      		// find() 查找 与正则匹配的字符序列
      		while(matcher.find()){
      			
      			// 开始的索引/偏移量
      			int start = matcher.start();
      			
      			// 接收的索引/偏移量
      			int end = matcher.end();
      			
      			// 获取到查询的这一组数据
      			String group = matcher.group();
      			
      			System.out.println(start+"   "+group+"    "+end);
      		}
      	}
      }
      
    • 替换功能

      package day15;
      
      /*
       * 替换功能
       * 		public String replaceAll(String regex,String replacement)
       * 		使用给定的replacement 替换此字符串所有匹配给定的正则表达式的子字符串
       */
      public class RegexReplaceAll {
      
      	public static void main(String[] args) {
      		
      		// 定义一个字符串
      		String str = "riroekjrghjir493t8";
      		
      		// 需求:去掉所有的数字,用*替换
      		String reg = "\d"; // 将单个数字替换成一个指定的字符
      		//String reg = "\d+"; // 将一组数字替换成一个指定的字符
      		
      		String string = str.replaceAll(reg, "*");
      		System.out.println(string);
      	}
      }
      
    • 分割功能

      package day15;
      
      import java.util.Scanner;
      
      
      /*
       * 分割功能
       * 		public String[] split(String regex)
       * 		根据给定的正则表达式匹配此字符串
       */
      public class RegexSplit {
      
      	public static void main(String[] args) {
      		// 给定一个年龄范围
      		String ages = "18-24";
      		
      		String reg = "-";
      		
      		String[] split = ages.split(reg);
      		
      		for (int i = 0; i < split.length; i++) {
      			System.out.println(split[i]);
      		}
      		int startAge = Integer.parseInt(split[0]);
      		int endAge = Integer.parseInt(split[1]);
      		
      		// 键盘录入年龄
      		System.out.println("先输入你的年龄:");
      		Scanner scanner = new Scanner(System.in);
      		int age = scanner.nextInt();
      		if(age >=startAge && age <=endAge){
      			System.out.println("可以培养培养!");
      		}else{
      			System.out.println("你是个好人!");
      		}
      	}
      }
      
  • 相关阅读:
    Visio使用遇到的问题
    UML类图符号 各种关系说明以及举例
    测试人员与开发人员之间的关系如何?
    linux命令学习-复制(cp,scp)
    linux服务器报Too many open files的解决方法
    QTP学习一添加默认的注释及调用外部vbs文件
    关于JAVA应用中文字体显示小方框的问题解决
    web测试方法总结
    linux命令学习-su
    Oracle定义varchar2()类型存储汉字的长度问题
  • 原文地址:https://www.cnblogs.com/borntodie/p/14092753.html
Copyright © 2011-2022 走看看