• java正则表达式


    1、下面是java中正则表达式常用的语法:

    字符的取值范围
    1.[abc] : 表示可能是a,可能是b,也可能是c。
    2.[^abc]: 表示不是a,b,c中的任意一个
    3.[a-zA-Z]: 表示是英文字母
    4.[0-9]:表示是数字

    简洁的字符表示
    .:匹配任意的字符
    d:表示数字
    D:表示非数字
    s:表示由空字符组成,[ xf]
    S:表示由非空字符组成,[^s]
    w:表示字母、数字、下划线,[a-zA-Z0-9_]
    W:表示不是由字母、数字、下划线组成

    数量表达式
    1.?: 表示出现0次或1次
    2.+: 表示出现1次或多次
    3.*: 表示出现0次、1次或多次
    4.{n}:表示出现n次
    5.{n,m}:表示出现n~m次
    6.{n,}:表示出现n次或n次以上

    逻辑表达式
    1.XY: 表示X后面跟着Y,这里X和Y分别是正则表达式的一部分
    2.X|Y:表示X或Y,比如"food|f"匹配的是foo(d或f),而"(food)|f"匹配的是food或f
    3.(X):子表达式,将X看做是一个整体

    2、是否匹配

    @Test
    public void test1() {
        String str = "1234567abc";
        // w:表示字母、数字、下划线,[a-zA-Z0-9_]
        // {n,}:表示出现n次或n次以上
        String regex = "\w{10,}";
        System.out.println(str.matches(regex));
    }
    
    @Test
    public void test2() {
        String str = "1234567abc";
        String regex = "\w{10,}";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(str);
        System.out.println(matcher.matches());
    }
    
    @Test
    public void test3() {
        String content = "I am noob from runoob.com.";
        String pattern = ".*runoob.*";
    
        boolean isMatch = Pattern.matches(pattern, content);
        System.out.println("字符串中是否包含了 'runoob' 子字符串? " + isMatch);
    }

    3、统计次数

     下面是一个对单词 "cat" 出现在输入字符串中出现次数进行计数的例子:

    @Test
    public void test4() {
        String REGEX = "\bcat\b";
        String INPUT = "cat cat cat cattie cat";
    
        Pattern p = Pattern.compile(REGEX);
        Matcher m = p.matcher(INPUT); // 获取 matcher 对象
        int count = 0;
    
        while (m.find()) {
            count++;
            System.out.println("Match number " + count);
            System.out.println("start(): " + m.start());
            System.out.println("end(): " + m.end());
            System.out.println(m.group()); // 匹配的字符串
        }
    }

    4、过滤读取

    从一串字符串中抓取指定格式的子字符串

    /**
     * Transform StackTrace info to string
     * @param t
     * @return
     */
    private static String printStackTraceToString(Throwable t) {
        if (t == null) {
            return "";
        }
        
        StringWriter sw = null;
        PrintWriter pw = null;
        try {
            sw = new StringWriter();
            pw =  new PrintWriter(sw);
            t.printStackTrace(pw);
            pw.flush();
            sw.flush();
            return sw.getBuffer().toString();
        } finally {
            if (sw != null) {
                try {
                    sw.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            if (pw != null) {
                pw.close();
            }
        }
    }
    
    /**
     * Get the specified information from StackTrace.
     * For example, the string of matching the regex["at amberai.jweb(\S*)"] or 
     * ["at com.jsite(\S*)"]. 
     * @param t
     * @return
     */
    private static String getStackTraceInfo(Throwable t) {
        String stackTraceInfo = "";
        
        String stackTrace = printStackTraceToString(t);
        
        // 匹配的第一种情况
        String regex = "at amberai.jweb(\S*)";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(stackTrace);
        while (matcher.find()) {
            stackTraceInfo += matcher.group() + "
    ";
        }
        
        // 匹配的第二种情况
        regex = "at com.jsite(\S*)";
        pattern = Pattern.compile(regex);
        matcher = pattern.matcher(stackTrace);
        while (matcher.find()) {
            stackTraceInfo += matcher.group() + "
    ";
        }
        
        return stackTraceInfo;
    }
    @Test
    public void demo() {
        String stackTraceInfo = "";
        String stackTrace = "at com.amberai.posmrg:ddagagag
    at com.amberai.mini:aaaamberai";
        
        String regex = "at(\s*)(\S*)amberai(\S*)";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(stackTrace);
        while (matcher.find()) {
            stackTraceInfo += matcher.group() + "
    ";
        }
        System.out.println(stackTraceInfo);
    }

    5、过滤替换

    public static void main(String[] args) {
        String string = replaceBlank("- a
    		
       
       
      2  
    3	4    -");
        System.out.println(string);
    }
    
    /*
     * 去除数据的空格、回车、换行符、制表符
     */
    public static String replaceBlank(String str) {
        String dest = "";
        if (str != null) {
            Pattern p = Pattern.compile("\s");
            Matcher m = p.matcher(str);
            dest = m.replaceAll("");
        }
        return dest;
    }

    参考:

      1)java中正则表达式基本用法

      2)菜鸟教程:https://www.runoob.com/java/java-regular-expressions.html

  • 相关阅读:
    数列(codevs 1141)
    Circle(codevs 3134)
    Jam的计数法(codevs 1140)
    水果姐逛水果街Ⅰ(codevs 3304)
    引水入城(codevs 1066)
    Vigenère 密码(luogu 1079)
    铺地毯(luogu 1003)
    SSO之CAS基础及应用视频教程(1)
    Spark高速入门指南(Quick Start Spark)
    python爬虫CSDN文章抓取
  • 原文地址:https://www.cnblogs.com/xy-ouyang/p/11544099.html
Copyright © 2020-2023  润新知