zoukankan      html  css  js  c++  java
  • 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
        }
    }
  • 相关阅读:
    css文本省略号
    javascript在数组的循环中删除元素
    ASP.NET MVC 微信公共平台开发之 微信接入
    ASP.NET Url重写
    通过FTP连接Azure上的网站
    UniversalApp启动页面设置
    ASP.NET页面动态添加js脚本
    使用HyperV虚拟机装系统
    使用一般处理程序HTTPHandler下载文件
    Egret Engine(白鹭引擎)介绍及windows下安装
  • 原文地址:https://www.cnblogs.com/seven7seven/p/3692496.html
Copyright © 2011-2022 走看看