• JAVA笔记28-正则表达式(补充、不重要)


    一、Greedy(贪婪的)尽可能多的匹配,Reluctant(不情愿的)尽可能少的匹配。Possessive(独占的)不常用。

    Greedy 数量词
    X? X,一次或一次也没有
    X* X,零次或多次
    X+ X,一次或多次
    X{n} X,恰好 n 次
    X{n,} X,至少 n 次
    X{n,m} X,至少 n 次,但是不超过 m 次
     
    Reluctant 数量词
    X?? X,一次或一次也没有
    X*? X,零次或多次
    X+? X,一次或多次
    X{n}? X,恰好 n 次
    X{n,}? X,至少 n 次
    X{n,m}? X,至少 n 次,但是不超过 m 次
     
    Possessive 数量词
    X?+ X,一次或一次也没有
    X*+ X,零次或多次
    X++ X,一次或多次
    X{n}+ X,恰好 n 次
    X{n,}+ X,至少 n 次
    X{n,m}+ X,至少 n 次,但是不超过 m 次

    例如:

    import java.util.regex.*;
    public class Test{
        public static void main(String args[]){
            //Pattern p = Pattern.compile("(.{3,10})[0-9]");//输出0 9
            //Pattern p = Pattern.compile("(.{3,10}?)[0-9]");//输出0 5
            Pattern p = Pattern.compile("(.{3,10}+)[0-9]");//输出not match!
            String s = "aaaa5bbb6";
            Matcher m = p.matcher(s);
            if(m.find()){
                System.out.println(m.start()+" "+m.end());
            }
            else{
                System.out.println("not match!");
            }
        }
    }

    二、除了?=,其他一般不用

    Pattern p = Pattern.compile("java",Pattern.CASE_INSENSITIVE);
    等价于:Pattern p = Pattern.compile("(?i)java");

    特殊构造(非捕获)
    (?:X) X,作为非捕获组
    (?idmsux-idmsux)  Nothing,但是将匹配标志i d m s u x on - off
    (?idmsux-idmsux:X)   X,作为带有给定标志 i d m s u x on - off
    (?=X) X,通过零宽度的正 lookahead
    (?!X) X,通过零宽度的负 lookahead
    (?<=X) X,通过零宽度的正 lookbehind
    (?<!X) X,通过零宽度的负 lookbehind
    (?>X) X,作为独立的非捕获组
    import java.util.regex.*;
    public class Test{
        public static void main(String args[]){
            Pattern p = Pattern.compile(".{3}");//输出444 a66
            //Pattern p = Pattern.compile(".{3}(?=a)");//输出444
            //Pattern p = Pattern.compile("(?=a).{3}");//输出a66
            //Pattern p = Pattern.compile(".{3}(?!a)");//输出44a 66b
            //Pattern p = Pattern.compile("(?!a).{3}");//输出444 66b
            //Pattern p = Pattern.compile(".{3}(?<!a)");//输出444 a66
            //Pattern p = Pattern.compile(".{3}(?<=a)");//输出44a
            String s = "444a66b";
            Matcher m = p.matcher(s);
            while(m.find()){
                System.out.println(m.group());
            }
        }
    }

    三、

    Back 引用
    n 任何匹配的 nth 捕获组
    import java.util.regex.*;
    public class Test{
        public static void main(String args[]){
            Pattern p = Pattern.compile("(\d\d)\1");//与group(1)相同
            String s = "1212";
            Matcher m = p.matcher(s);
            System.out.println(m.matches());//true
            
            p = Pattern.compile("(\d(\d))\2");//与group(2)相同
            s = "12";
            m = p.matcher(s);
            System.out.println(m.matches());//false
    
            p = Pattern.compile("(\d(\d))\2");//与group(2)相同
            s = "122";
            m = p.matcher(s);
            System.out.println(m.matches());//true
        }
    }
  • 相关阅读:
    华为S12700 NQA配置
    斐讯K1 K2 开启Telnet
    存储的一些基本概念(HBA,LUN)
    华为AR配置内部服务器示例(只有1个公网IP)
    使用nginx 做kbmmw REST 服务的负载均衡
    第一个 macOS 64位 kbmmw 服务器
    使用FMXlinux 开发linux 桌面应用
    推荐一套免费跨平台的delphi 哈希及加密算法库
    使用kbmmw 的调度事件动态显示时间
    提高sqlite 的运行性能(转载)
  • 原文地址:https://www.cnblogs.com/seven7seven/p/3692496.html
Copyright © 2020-2023  润新知