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 }