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 }