zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    线上一次大量 CLOSE_WAIT 复盘
    etcd 性能优化实践
    Web 前端密码加密是否有意义?
    tmp
    京东 PC 首页 2019 改版前端总结 原创: 何Jason,EC,小屁 凹凸实验室 今天
    http://stblog.baidu-tech.com/?p=1684) coredump调试记录
    Java字节码增强探秘
    dedecms 织梦更改rss的路径、网站地图sitemap的路径
    dedecms时间日期标签大全
    织梦CMS被挂马特征汇总
  • 原文地址:https://www.cnblogs.com/gongxr/p/8370745.html
Copyright © 2011-2022 走看看