• 正则表达式(二)


    1.正则表达式处理字符串

    案例一(字符查找和替换):

      找出一个字符串中所有的“java”,并将一个字符串中的奇数位置的“java”(不区分大小写)换成“java”,偶数位置的“java”(不分大小写)换成“JAVA”。

     1 import java.util.regex.Matcher;
     2 import java.util.regex.Pattern;
     3 
     4 
     5 public class RegexTStr {
     6 
     7     public static void main(String[] args) {
     8         
     9         Pattern p=Pattern.compile("java",Pattern.CASE_INSENSITIVE);
    10         Matcher m=p.matcher("java,Java ,JAva, JAVA heheJAVa,hellojavATOO");
    11         
    12         System.out.println("找出所有java");
    13         while(m.find()){
    14             System.out.println(m.group());  //表达式 m.group()s.substring(m.start(), m.end()) 是等效的。
    15         }
    16         
    17         
    18         System.out.println();
    19         //奇数换java,偶数换JAVA
    20         m.reset();
    21         StringBuffer sb=new StringBuffer();
    22         int i=0;
    23         while(m.find()){
    24             i++;
    25             if(i%2==1){
    26                 m.appendReplacement(sb, "java");
    27             }else{
    28                 m.appendReplacement(sb, "JAVA");
    29             }
    30         }
    31         
    32         m.appendTail(sb);
    33         System.out.println(sb);
    34     }
    35 
    36 }

    输出结果:

    找出所有java
    java
    Java
    JAva
    JAVA
    JAVa
    javA

    java,JAVA ,java, JAVA hehejava,helloJAVATOO

    注意:matcher中表达式 m.group()s.substring(m.start(), m.end()) 是等效的。

    案例二(正则表达式分组):

      在正则表达式中,可以用小括号"()"来对正则表达式中的内容进行分组,并用m.group()按组取出。直接看下面例子:

     1 import java.util.regex.Matcher;
     2 import java.util.regex.Pattern;
     3 
     4 
     5 public class RegexTStr2 {
     6 
     7     public static void main(String[] args) {
     8         Pattern p=Pattern.compile("\d{3,5}[a-z]{2}");
     9         Matcher m=p.matcher("123aa-12345bb-123456ccc-1234ddd-00");
    10         while(m.find()){
    11             System.out.println(m.group());
    12         }
    13     }
    14 
    15 }

     输出结果:

    123aa
    12345bb
    23456cc
    1234dd
      上面的代码,我们从一个字符串中取出了满足正则表达式的子串,那么如果我们现在要求只取出满足要求的子串中的数字部分或字母部分要如何做呢?相信很多人看到这里立刻会想到在循环中再写正则表达式对子串进行处理,那么还有没有其他方法呢?请看下面:

     1 import java.util.regex.Matcher;
     2 import java.util.regex.Pattern;
     3 
     4 
     5 public class RegexTStr2 {
     6 
     7     public static void main(String[] args) {
     8         Pattern p=Pattern.compile("(\d{3,5})([a-z]{2})");//将正则表达式分成2组
     9         Matcher m=p.matcher("123aa-12345bb-123456ccc-1234ddd-00");
    10         while(m.find()){
    11             System.out.println(m.group(1)+"----------"+m.group(2));            
    12         }
    13     }
    14 
    15 }

    输出结果:

    123----------aa
    12345----------bb
    23456----------cc
    1234----------dd

      这样是不是比其他方法更简单呢?上面的m.group(n)中的参数n代表第n组。那么问题来了,对于一个复杂的表达式,很容易出现小括号之间的多层嵌套,分组不可能像例子这样一目了然,那么正则表达式分组的标准是什么呢?

      答案:对于一个复杂的表达式,我们按照左括号"("出现的顺序来确定分组。第一个左括号包含的内容就代表第一组,第二个代表第二组,以此类推。

      所以,如果要处理的字符串的处理过程很复杂,我们可以用分组的正则去处理

  • 相关阅读:
    测试如何发挥更大的价值?聊聊测试左移和右移
    Cocos Creator性能调优
    跨域问题产生的原因和解决方法
    tornado部署
    tonado
    MySQL binlog
    grpc
    nextjs中的懒加载
    前端低代码-少写代码实现灵活需求
    MySQL中的锁
  • 原文地址:https://www.cnblogs.com/andong2015/p/4256766.html
Copyright © 2020-2023  润新知