(一)正则表达式及语法简介
- String类使用正则表达式的几个方法:
- 正则表达式支持的合法字符:
- 特殊字符:
- 预定义字符:
- 方括号表达式:
- 圆括号表达式:用于将多个表达式组成一个子表达式,可以使用或运算符“|”,比如正则表达式:"(aa|bb|cc)"就表示匹配"aa"、"bb"、"cc"三个字符串中的其中一个。
- 边界匹配符:
- 贪婪、勉强、占有模式的数量标识符:
(二)Java正则表达式的简单用法
- 两个关键类:(1)Pattern:正则表达式编译后在内存中的表示形式。是不可变类,可供多个线程并发使用;(2)Matcher:保存执行匹配所涉及的各种状态,多个Matcher对象可以共享一个Pattern对象。
- 简单用法程序示例:
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
-
Matcher类的常用方法:
- 程序举例:
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讲义(第二版)》
(完)