Java之正则表达式

Posted 星瑞的随笔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java之正则表达式相关的知识,希望对你有一定的参考价值。

 

  1 package test_demo.zhengzebiaodashi;
  2 
  3 import org.junit.Test;
  4 import java.util.regex.Matcher;
  5 import java.util.regex.Pattern;
  6 
  7 public class ZhengZeClass {
  8 
  9 /*
 10  *  java.util.regex 包主要包括以下三个类:
 11  *  Pattern 类:
 12  *      pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。
 13  *      要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。
 14  *  Matcher 类:
 15  *      Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。
 16  *      你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。
 17  *  PatternSyntaxException:
 18  *      PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
 19  *  详细查看:http://www.runoob.com/java/java-regular-expressions.html
 20  */
 21 
 22     /**
 23      * 判断文本是否包含某字符串
 24      * -使用了正则表达式 .*runoob.* 用于查找字符串中是否包了 runoob 子串
 25      */
 26     @Test
 27     public void testMatches() {
 28         String content = "I am noob " +
 29                 "from runoob.com.";
 30         System.out.println("content:" + content);
 31 
 32         String pattern = ".*runoob.*";
 33         System.out.println("pattern:" + pattern);
 34 
 35         boolean isMatch = Pattern.matches(pattern, content);
 36         System.out.println("字符串中是否包含了 ‘runoob‘ 子字符串? " + isMatch);
 37     }
 38 
 39     /**
 40      * 分割字符串
 41      * -Matcher.find()方法是部分匹配;Matcher.matches()方法是全部匹配
 42      * -group(0)表示整个表达式
 43      */
 44     @Test
 45     public void testMatchesGroup() {
 46         // 按指定模式在字符串查找
 47         String content = "This order was placed for QT3000! OK?";
 48         String pattern = "(\\D*)(\\d+)(.*)";
 49         // 创建 Pattern 对象
 50         Pattern r = Pattern.compile(pattern);
 51         // 现在创建 matcher 对象
 52         Matcher m = r.matcher(content);
 53         if (m.find()) {
 54             System.out.println("group(0) value: " + m.group(0));
 55             System.out.println("group(1) value: " + m.group(1));
 56             System.out.println("group(2) value: " + m.group(2));
 57             System.out.println("group(3) value: " + m.group(3));
 58             System.out.println("分组总数:: " + m.groupCount());
 59         } else {
 60             System.out.println("NO MATCH");
 61         }
 62     }
 63 
 64     @Test
 65     public void testMatchesHbasePut() {
 66         String content = "put ‘t_test‘,‘test-ugid‘,‘f1:phone_no‘,‘15261851357‘";
 67         String putPattern = "^put\\s*‘(.*?)‘\\s*,\\s*‘(.*?)‘\\s*,\\s*‘f1:(.*?)‘\\s*,\\s*‘(.*?)‘$";
 68         Pattern p = Pattern.compile(putPattern);
 69         Matcher m = p.matcher(content);
 70 //        matches()方法是全部匹配
 71         if (m.matches()) {
 72             System.out.println("group(0) value: " + m.group(0));
 73             System.out.println("分组总数:: " + m.groupCount());
 74             for (int i = 1; i <= m.groupCount(); i++) {
 75                 System.out.println("group(" + i + ") value: " + m.group(i));
 76             }
 77         }
 78     }
 79 
 80     /**
 81      * 统计匹配次数
 82      * -Start方法返回之前的匹配操作期间,由给定组所捕获的子序列的初始索引;
 83      * -end方法为最后一个匹配字符的索引加1。
 84      */
 85     @Test
 86     public void testMatchNumber() {
 87 //        匹配一个字边界,即字与空格间的位置。
 88         String REGEX = "\\bcat\\b";
 89         String INPUT = "cat cat cat cattie cat";
 90 
 91         Pattern p = Pattern.compile(REGEX);
 92         Matcher m = p.matcher(INPUT); // 获取 matcher 对象
 93         int count = 0;
 94 
 95         while (m.find()) {
 96             count++;
 97             System.out.println("Match number: " + count);
 98 //            Start方法返回之前的匹配操作期间,由给定组所捕获的子序列的初始索引。
 99             System.out.println("start(): " + m.start());
100 //            end方法为最后一个匹配字符的索引加1。
101             System.out.println("end(): " + m.end());
102         }
103     }
104 
105     /**
106      * 文本替换
107      * -replaceFirst方法用来替换首次匹配正则表达式的文本;
108      * -replaceAll方法用来替换所有匹配正则表达式的文本。
109      */
110     @Test
111     public void testReplaceAll() {
112         String REGEX = "dog";
113         String INPUT = "The dog says meow. All dogs say meow.";
114         String REPLACE = "cat";
115 
116         Pattern p = Pattern.compile(REGEX);
117         Matcher m = p.matcher(INPUT);
118 //        INPUT = m.replaceFirst(REPLACE);
119         String output = m.replaceAll(REPLACE);
120 
121         System.out.println("替换前:" + INPUT);
122         System.out.println("替换后:" + output);
123     }
124 
125 }

 

以上是关于Java之正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

java之正则表达式

JAVA基础之正则表达式

Java基础学习笔记十三 常用API之正则表达式DateDateFormatCalendar

JAVA正则表达式怎么匹配所有符合要求的子字符串

java解析xml ②之正则表达式配合解析

Python学习笔记之正则表达式