Java基础知识回顾--正则表达式

简介: RegularExpressions 字符串处理利器正则表达式语法 正则表达式包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。 特殊字符 下表包含了单字符元字符的列表以及它们在正则表达式中的行为。 若要匹配这些特殊字符之一,必须首先转义字符,即,在字符前面加反斜杠字符 ()。 例如,若要搜索“+”文本字符,可使用表达式“+”。 元字符

RegularExpressions
字符串处理利器

正则表达式语法
正则表达式包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。
特殊字符
下表包含了单字符元字符的列表以及它们在正则表达式中的行为。
若要匹配这些特殊字符之一,必须首先转义字符,即,在字符前面加反斜杠字符 ()。 例如,若要搜索“+”文本字符,可使用表达式“+”。
这里写图片描述
这里写图片描述

元字符
下表包含了多字符元字符的列表以及它们在正则表达式中的行为。
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

非打印字符
下表包含表示非打印字符的转义序列。
这里写图片描述

优先级顺序
正则表达式的计算方式与算术表达式非常类似;即从左到右进行计算,并遵循优先级顺序。
下表按从高到低的顺序包含了正则表达式运算符的优先级顺序。
这里写图片描述

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Test {

    public static void main(String[] args) {
        //简单认识正则表达式的概念
        /*
        p("abc".matches("..."));
        //两个反斜杠d就是转义一个反斜杠d表示数字
        p("a8729a".replaceAll("\\d", "-"));
        Pattern p = Pattern.compile("[a-z]{3}");
        Matcher m = p.matcher("fgh");
        p(m.matches());
        p("fgha".matches("[a-z]{3}"));
        */

        //初步认识. * + ? 
        // * 零个或多个字符
        // + 一个或多个字符
        // ? 一个或零个
        /*
        p("a".matches("."));
        p("aa".matches("aa"));
        p("aaaa".matches("a*"));
        p("aaaa".matches("a+"));
        p("".matches("a*"));
        p("aaaa".matches("a?"));
        p("".matches("a?"));
        p("a".matches("a?"));
        p("214523145234532".matches("\\d{3,100}"));
        p("192.168.0.aaa".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));
        p("192".matches("[0-2][0-9][0-9]"));
        */

        //范围
        /*
        p("a".matches("[abc]"));
        //取非
        p("a".matches("[^abc]"));
        p("A".matches("[a-zA-Z]"));
        //底下两种都是或者
        p("A".matches("[a-z]|[A-Z]"));
        p("A".matches("[a-z[A-Z]]"));
        p("R".matches("[A-Z&&[RFG]]"));
        */

        //认识\s \w \d \
        /**
        * \s 所有的空白字符
        * \w 小写a-z和A-Z和下划线_和0-9,构成关键字的字符
        * \d 0-9
        **/
        /*
        p(" \n\r\t".matches("\\s{4}"));
        p(" ".matches("\\S"));
        p("a_8".matches("\\w{3}"));
        p("abc888&^%".matches("[a-z]{1,3}\\d+[&^#%]+"));
        p("\\".matches("\\\\"));
        */

        //POSIX Style
        //p("a".matches("\\p{Lower}"));

        //boundary
        /**
        * 这个介绍看后面配图
        **/
        /*
        p("hello sir".matches("^h.*"));
        p("hello sir".matches(".*ir$"));
        p("hello sir".matches("^h[a-z]{1,3}o\\b.*")); //true,\b是单词边界
        p("hellosir".matches("^h[a-z]{1,3}o\\b.*")); //false
        //whilte lines 空白行
        p(" \n".matches("^[\\s&&[^\\n]]*\\n$"));

        p("aaa 8888c".matches(".*\\d{4}."));
        p("aaa 8888c".matches(".*\\b\\d{4}."));
        p("aaa8888c".matches(".*\\d{4}."));
        p("aaa8888c".matches(".*\\b\\d{4}."));
        */

        //email
        //p("asdfasdfsafsf@dsdfsdf.com".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));

        //matches find lookingAt
        /*
        Pattern p = Pattern.compile("\\d{3,5}");
        String s = "123-34345-234-00";
        Matcher m = p.matcher(s);
        p(m.matches());
        m.reset();
        p(m.find());
        p(m.start() + "-" + m.end());
        p(m.find());
        p(m.start() + "-" + m.end());
        p(m.find());
        p(m.start() + "-" + m.end());
        p(m.find());
        //p(m.start() + "-" + m.end());找不到用这个就会报错
        p(m.lookingAt()); //每次都从头开始找起
        p(m.lookingAt());
        p(m.lookingAt());
        p(m.lookingAt());
        */

        //replacement
        /*
        Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher("java Java JAVa JaVa IloveJAVA you hateJava afasdfasdf");
        StringBuffer buf = new StringBuffer();
        int i=0;
        while(m.find()) {
            i++;
            if(i%2 == 0) {
                m.appendReplacement(buf, "java");
            } else {
                m.appendReplacement(buf, "JAVA");
            }
        }
        m.appendTail(buf);
        p(buf);
        */

        //group
        /*
        Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})"); //这个中间的两个小括号就是分组用的,分为两组
        String s = "123aa-34345bb-234cc-00";
        Matcher m = p.matcher(s);
        while(m.find()) {
            //p(m.group());
            p(m.group(1)); //分组输出,正则表达式中小括号分组
        }
        */

        //qulifiers 修订词
        /*
        Pattern p = Pattern.compile(".{3,10}+[0-9]");  //一下子吞最大的10个,然后发现不匹配吐出一个匹配
        //Pattern p = Pattern.compile(".{3,10}?[0-9]");  //这个加问号的就是不贪婪的,只读最少的就是aaaa5
        String s = "aaaa5bbbb68";
        Matcher m = p.matcher(s);
        if(m.find())
            p(m.start() + "-" + m.end());
        else 
            p("not match!");
        */

        //non-capturing groups 用得比较少,用的时候试一下
        /*
        Pattern p = Pattern.compile(".{3}(?=a)");
        String s = "444a66b";
        Matcher m = p.matcher(s);
        while(m.find()) {
            p(m.group());
        }
        */

        //back refenrences 向前引用
        /*
        Pattern p = Pattern.compile("(\\d(\\d))\\2");
        String s = "122";
        Matcher m = p.matcher(s);
        p(m.matches());
        */

        //flags的简写
        //Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
        p("Java".matches("(?i)(java)"));
    }

    public static void p(Object o) {
        System.out.println(o);
    }

}

上述代码又看不懂的这有图片解释
这里写图片描述
这里写图片描述
这里写图片描述

下面贴出网页中抓取邮件的小例子。

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class EmailSpider {

    public static void main(String[] args) {
        try {
            BufferedReader br = new BufferedReader(new FileReader("D:\\share\\courseware\\1043633.html"));
            String line = "";
            while((line=br.readLine()) != null) {
                parse(line);
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private static void parse(String line) {
        Pattern p = Pattern.compile("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+");
        Matcher m = p.matcher(line);
        while(m.find()) {
            System.out.println(m.group());
        }
    }

}
目录
相关文章
|
1月前
|
XML 数据可视化 前端开发
java正则表达式
java正则表达式
|
1月前
|
Java
Java中的多线程编程:基础知识与实践
【4月更文挑战第8天】本文将深入探讨Java中的多线程编程,包括其基础知识和实践应用。我们将从多线程的基本概念开始,然后深入到Java中如何创建和管理线程,以及如何使用同步机制来防止数据不一致。我们还将讨论一些常见的多线程问题,如死锁和竞态条件,并探讨如何解决这些问题。最后,我们将通过一个实际的例子来演示如何在Java中使用多线程。
|
1月前
|
Java
Java中的多线程编程:基础知识与实践
【4月更文挑战第7天】 在现代计算机科学中,多线程编程是一个不可或缺的部分。它允许多个任务在同一时间运行,从而提高了程序的效率和响应性。Java作为一种广泛使用的编程语言,其对多线程的支持使得开发人员能够编写出高效的并发程序。本文将介绍Java中多线程的基础知识,包括线程的概念、创建和管理线程的方法,以及多线程编程的实践技巧。我们将通过实例来深入理解Java多线程编程,并探讨如何有效地解决多线程带来的问题。
|
4天前
|
Java
Java中的多线程编程:基础知识与实战技巧
【5月更文挑战第6天】多线程编程是Java中的一个重要特性,它允许我们在一个程序中同时执行多个任务。本文将介绍Java多线程的基础知识,包括线程的创建、启动、同步和通信,以及如何在Java中实现多线程编程。通过实例代码和解析,帮助读者深入理解Java多线程编程的概念和应用。
|
5天前
|
Java
Java中的多线程编程:基础知识与实践
【5月更文挑战第5天】在现代软件开发中,多线程编程是一个重要的概念,尤其是在Java这样的多平台、高性能的编程语言中。通过多线程,我们可以实现并行处理,提高程序的运行效率。本文将介绍Java中多线程编程的基础知识,包括线程的概念、创建和控制方法,以及一些常见的多线程问题和解决方案。
|
10天前
|
并行计算 Java 数据处理
Java中的多线程编程:基础知识与实践
【5月更文挑战第1天】本文将深入探讨Java中的多线程编程,包括其基本概念、实现方式以及实际应用。我们将从理论和实践两个角度出发,详细解析线程的创建、启动、控制以及同步等关键问题,并通过实例代码演示如何在Java中有效地使用多线程。
|
10天前
|
存储 Java 程序员
Java中的多线程编程:基础知识与实践
【5月更文挑战第1天】在现代计算机科学中,多线程是一种重要的并行计算技术,允许多个执行流程并发运行。本文将深入探讨Java语言中的多线程编程,从基础概念到实际应用,帮助读者理解多线程的核心原理,并通过实例学习如何在Java中创建和管理线程。我们将涵盖线程的生命周期、同步机制以及如何利用高级类如Executor框架来优化多线程应用的性能。通过本文的学习,读者将具备设计和实现高效、稳定多线程Java应用程序的能力。
7 2
|
10天前
|
Java 调度 开发者
Java中的多线程编程:基础知识与实践
【4月更文挑战第30天】 在现代软件开发中,多线程编程是提高程序性能和响应能力的关键。Java作为一款广泛使用的编程语言,提供了丰富的多线程支持。本文将介绍Java多线程的基础概念、实现方法以及常见问题的解决策略。我们将从线程的创建和管理入手,逐步深入到同步机制、死锁避免以及高级并发工具类的应用。通过实例代码演示和理论分析,旨在帮助读者掌握Java多线程编程的核心技能,提升软件项目的并行处理能力。
|
10天前
|
存储 安全 Java
java基础知识
【4月更文挑战第30天】java基础知识
9 0
|
12天前
|
Java
Java中的多线程编程:基础知识与实践
【4月更文挑战第28天】在现代计算机科学中,多线程编程是一项重要的技术。它允许一个程序同时执行多个任务,从而提高了效率和性能。本文将深入探讨Java中的多线程编程,包括其基本概念、实现方法以及一些常见的问题和解决方案。我们将通过实例代码来展示如何在Java中创建和管理线程,以及如何使用同步机制来避免并发问题。