$Java正则表达式基础整理

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

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

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

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

  4. 程序举例:
     1   public static void test1() {
     2         System.out.println(Pattern.matches("a\wb", "a_b")); // 输出:true
     3 
     4         Pattern p = Pattern.compile("a*b");
     5         Matcher m = p.matcher("aabzaaadaaafbc");
     6 
     7         System.out.println(m.matches()); // 输出:false
     8         System.out.println(m.find()); // 输出:true
     9         System.out.println(m.group()); // 输出:b
    10         System.out.println(m.start()); // 输出:2
    11         System.out.println(m.end()); // 输出:3
    12         System.out.println(m.lookingAt()); // 输出:true
    13         m.reset("zab");
    14         System.out.println(m.lookingAt()); // 输出:false
    15     }
    16 
    17     public static void test2() {
    18         Matcher m = Pattern.compile("\w+").matcher("Java is very easy!");
    19 
    20         while (m.find()) {
    21             System.out.println(m.group() + "子串的起始位置:" + m.start() + ",结束位置:"
    22                     + m.end());
    23         }
    24 
    25         int i = 0;
    26         while (m.find(i)) {
    27             System.out.print(m.group() + "	");
    28             i++;
    29         }
    30 
    31         // 输出:
    32         // Java子串的起始位置:0,结束位置:4
    33         // is子串的起始位置:5,结束位置:7
    34         // very子串的起始位置:8,结束位置:12
    35         // easy子串的起始位置:13,结束位置:17
    36         // Java ava va a is is s very very ery ry y easy easy asy sy y
    37     }
    38 
    39     public static void test3() {
    40         String[] mails = { "Jiayongji@163.com", "Jiayongji@gmail.com",
    41                 "jy@hust.org", "wawa@abc.cc" };
    42         String mailRegEx = "\w{3,20}@\w+\.(com|cn|edu|org|net|gov)";
    43         Pattern mailPattern = Pattern.compile(mailRegEx);
    44 
    45         Matcher mailMatcher = null;
    46 
    47         for (String mail : mails) {
    48             if (mailMatcher == null) {
    49                 mailMatcher = mailPattern.matcher(mail);
    50             } else {
    51                 mailMatcher.reset(mail);
    52             }
    53 
    54             System.out.println(mail + (mailMatcher.matches() ? "是" : "不是")
    55                     + "一个合法的邮箱地址");
    56         }
    57 
    58         // 输出:
    59         // Jiayongji@163.com是一个合法的邮箱地址
    60         // Jiayongji@gmail.com是一个合法的邮箱地址
    61         // jy@hust.org不是一个合法的邮箱地址
    62         // wawa@abc.cc不是一个合法的邮箱地址
    63 
    64     }
    65 
    66     public static void test4() {
    67         Matcher m = Pattern.compile("\bre\w*").matcher(
    68                 "Java is real good at inrestart and regex.");
    69         System.out.println(m.replaceAll("哈哈"));
    70 
    71         // 输出:
    72         // Java is 哈哈 good at inrestart and 哈哈.
    73 
    74     }

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

(完)

原文地址:https://www.cnblogs.com/jiayongji/p/5613846.html