(一)正则表达式及语法简介

  1. String类使用正则表达式的几个方法:
  2. 正则表达式支持的合法字符:
  3. 特殊字符:
  4. 预定义字符:
  5. 方括号表达式:
  6. 圆括号表达式:用于将多个表达式组成一个子表达式,可以使用或运算符“|”,比如正则表达式:"(aa|bb|cc)"就表示匹配"aa"、"bb"、"cc"三个字符串中的其中一个。
  7. 边界匹配符:
  8. 贪婪、勉强、占有模式的数量标识符:

(二)Java正则表达式的简单用法

  1. 两个关键类:(1)Pattern:正则表达式编译后在内存中的表示形式。是不可变类,可供多个线程并发使用;(2)Matcher:保存执行匹配所涉及的各种状态,多个Matcher对象可以共享一个Pattern对象。
  2. 简单用法程序示例:
     System.out.println(Pattern.matches("a\\wb", "a_b")); // 输出:true
    Pattern p = Pattern.compile("a*b");
    Matcher m = p.matcher("aabzaaadaaafbc");
    System.out.println(m.matches()); // 输出:false
  3. Matcher类的常用方法:

  4. 程序举例:
       public static void test1() {
    System.out.println(Pattern.matches("a\\wb", "a_b")); // 输出:true Pattern p = Pattern.compile("a*b");
    Matcher m = p.matcher("aabzaaadaaafbc"); System.out.println(m.matches()); // 输出:false
    System.out.println(m.find()); // 输出:true
    System.out.println(m.group()); // 输出:b
    System.out.println(m.start()); // 输出:2
    System.out.println(m.end()); // 输出:3
    System.out.println(m.lookingAt()); // 输出:true
    m.reset("zab");
    System.out.println(m.lookingAt()); // 输出:false
    } public static void test2() {
    Matcher m = Pattern.compile("\\w+").matcher("Java is very easy!"); while (m.find()) {
    System.out.println(m.group() + "子串的起始位置:" + m.start() + ",结束位置:"
    + m.end());
    } int i = 0;
    while (m.find(i)) {
    System.out.print(m.group() + "\t");
    i++;
    } // 输出:
    // Java子串的起始位置:0,结束位置:4
    // is子串的起始位置:5,结束位置:7
    // very子串的起始位置:8,结束位置:12
    // easy子串的起始位置:13,结束位置:17
    // Java ava va a is is s very very ery ry y easy easy asy sy y
    } public static void test3() {
    String[] mails = { "Jiayongji@163.com", "Jiayongji@gmail.com",
    "jy@hust.org", "wawa@abc.cc" };
    String mailRegEx = "\\w{3,20}@\\w+\\.(com|cn|edu|org|net|gov)";
    Pattern mailPattern = Pattern.compile(mailRegEx); Matcher mailMatcher = null; for (String mail : mails) {
    if (mailMatcher == null) {
    mailMatcher = mailPattern.matcher(mail);
    } else {
    mailMatcher.reset(mail);
    } System.out.println(mail + (mailMatcher.matches() ? "是" : "不是")
    + "一个合法的邮箱地址");
    } // 输出:
    // Jiayongji@163.com是一个合法的邮箱地址
    // Jiayongji@gmail.com是一个合法的邮箱地址
    // jy@hust.org不是一个合法的邮箱地址
    // wawa@abc.cc不是一个合法的邮箱地址 } public static void test4() {
    Matcher m = Pattern.compile("\\bre\\w*").matcher(
    "Java is real good at inrestart and regex.");
    System.out.println(m.replaceAll("哈哈")); // 输出:
    // Java is 哈哈 good at inrestart and 哈哈. }

Refer:《疯狂Java讲义(第二版)》

(完)

随机推荐

  1. 分布式服务框架 Zookeeper(二)官方介绍

    ZooKeeper:为分布式应用而生的分布式协调服务 ZooKeeper是一个为分布式应用而设计的分布式的.开源的协调服务.它提供了一套简单的原语,分布式应用利用这套原语可以实现更高层的服务,比如一致 ...

  2. 2017 Wuhan University Programming Contest (Online Round) B Color 树形dp求染色方法数

    /** 题目:Color 链接:https://oj.ejq.me/problem/23 题意:给定一颗树,将树上的点最多染成m种颜色,有些节点不可以染成某些颜色.相邻节点颜色不同.求染色方法数. 思 ...

  3. Win10秘笈:两种方式修改网卡物理地址(MAC)

    每台能够上网的电脑都有网卡,不管是有线还是无线,网卡本身都得有物理地址,也就是MAC(Media Access Control 或 Medium Access Control)地址.这个地址理论上是固 ...

  4. 第一百七十四节,jQuery,Ajax进阶

    jQuery,Ajax进阶 学习要点: 1.加载请求 2.错误处理 3.请求全局事件 4.JSON 和 JSONP 5.jqXHR 对象 在 Ajax 课程中,我们了解了最基本的异步处理方式.本章,我 ...

  5. Codeforces Round #404 (Div. 2) DE

    昨晚玩游戏竟然不小心错过了CF..我是有多浪啊. 今天总算趁着下课时间补了,感觉最后两题还是挺有意思的,写个题解. D: 题目大意: 给出一个括号序列,问有多少个子序列 是k个'(' + k个')' ...

  6. PNP与NPN三极管

    主要区别是电流流向和电压不同:PNP管子是发射极流入后从基极和集电极流出,NPN管子是基极和集电极流入从发射极流出.PNP管子工作在放大区时电压是,Ue>Ub>Uc,NPN管子工作在放大区 ...

  7. Handler机制原理

    andriod提供了Handler 和 Looper 来满足线程间的通信.Handler先进先出原则.Looper类用来管理特定线程内对象之间的消息交换(MessageExchange). 1)Loo ...

  8. TextView 图片居右

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout ...

  9. python 基础 10.0 nosql 简介--redis 连接池及管道

    一. NOSQL 数据库简介 NoSQL 泛指非关系型的数据库.非关系型数据库与关系型数据库的差别 非关系型数据库的优势: 1.性能NOSQL 是基于键值对的,可以想象成表中的主键和值的对应关系,而且 ...

  10. Pythonpika PhpAmqpLib rabbitmq服务中queues被清空的异常处理 无模式数据库对数据结构的定义和控制

    /** * Declares queue, creates if needed * * @param string $queue * @param bool $passive * @param boo ...