• Java中的正则表达式


    前言

    • 正则表达式定义了字符串的模式。 正则表达式可以用来搜索、编辑或处理文本。
    • 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
    • 通过正则表达式处理字符串复杂的查找/替换/匹配/分割工作。

    实例

    概念

    使用单个字符串来描述/匹配一系列符合某个语法规则的字符串

    步骤
    1. 通过大量的字符串找规律定义规则。
    2. 使用这种规则去匹配新的字符串。
    3. 匹配成功作出相应的操作(匹配 查找 替换 分割)。
    工具

    Regexper

    字符

    正则表达式由两种基本字符组成
    原义字符:字符本身就是一个正则 f
    元字符: * + ? $ ^ () [] {}...

    对正则表达式进行分类:

    • 字符类: [abc] 将字符进行归类,可以出现[]中的其中一个 对abc其中一个进行匹配
      [^abc] 对不是abc的字符进行匹配

    • 范围类:
      [a-z] 表示代表a-z中的一个字符
      表示所有的英文字母和数字 [a-zA-Z0-9]

    • 预定义类:
      d == [0-9] 数字
      D == [^0-9] 非数字
      空白字符:[ x0Bf ] == s
      [^ x0Bf ] == S
      [a-zA-Z0-9] w
      [^a-zA-Z0-9] W
      . 任何字符(与行结束符可能匹配也可能不匹配)

    • 边界字符
      ^:以XXX开头
      $:以XXX结尾
      :单词边界
      B:非单词边界

    • 量词
      ?:出现0次或者1次
      +:出现1次或者多次
      *:出现任意次
      {n}:出现正好n次
      {n,m}出现n-m次
      {n,}出现至少n次

    • 分组 ()
      如何让Jack出现至少3次
      (Jack){3,}
      忽略分组:每一组能够分组,但是没有编号 ?:

      Ja(ck|Love)Kitty

    • 反向引用
      利用分组的编号进行反向引用
      反向引用使用$,必须先分组
      2018-04-27 ==> 04/27/2018

    在Java中的应用
       1.字符串查找操作  Pattern和Matcher
       2.字符串匹配操作 字符串的matches()方法
       3.字符串替换操作 字符串的replaceAll()和replaceFirst()方法
       4.字符串分割 split() 方法
    

    测试

    验证手机号
    匹配如下四个手机号
    18079243050
    15160869850
    18765068050
    14235452850
    - 分析:
    1.以1开头
    2.一共11位
    3.50结尾
    4.倒数第三位是 0 或者 8
    
    public class Test424_1 {
    	public static void main(String[] args) {
    		Scanner input = new Scanner(System.in);
    		System.out.println("请输入手机号");
    		String s  = input.next();
    		String regex = "^1[0-9]{7}(0|8)(50)$";
    		System.out.println(s.matches(regex));	
    	}
    }
    
    日期替换
       2016/03/05
       demo/07/ss
       1993/08/05
       2016/11/24
       12345/23/45678
       12345/24/3356
       1993-08-05
       将正确的日期格式替换为03-05-2016
    - 分析:
    1.原日期为年月日
    2.替换日期为月日年
    3.利用分组()和$反向引用
    
    public class Test424_3 {
    	public static void main(String[] args) {
    		String s =  " 2016/03/05 "
    				+ 	" demo/07/ss"
    				+	" 1993/08/05"
    				+	" 2016/11/24"
    				+	" 12345/23/45678"
    				+	" 12345/24/3356"
    				+	" 1993-08-05";
    		String regex  ="\b(\d{4})[/-](\d{2})[/-](\d{2})\b";
    		System.out.println(s.replaceAll(regex, "$2-$3-$1"));
    	}
    }
    

    推荐书籍:《正则表达式必知必会》

    以上

  • 相关阅读:
    C#设计模式(6)——原型模式(Prototype Pattern)
    C#设计模式(4)——抽象工厂模式
    C#设计模式(3)——工厂方法模式
    C#设计模式(2)——简单工厂模式
    cmd 打 jar 包
    java eclipse 中给args 传递参数
    java 中值传递和引用传递(转)
    java unreachable code不可达代码
    java语言中if语句的用法
    java中 构造器与void
  • 原文地址:https://www.cnblogs.com/fzxey/p/10765298.html
Copyright © 2020-2023  润新知