zoukankan      html  css  js  c++  java
  • 正则表达式(二)

    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组。那么问题来了,对于一个复杂的表达式,很容易出现小括号之间的多层嵌套,分组不可能像例子这样一目了然,那么正则表达式分组的标准是什么呢?

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

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

  • 相关阅读:
    在chrome中利用“油猴”为每个网页增加“返回顶部”功能
    EasyVS 0.3版本发布 给力变换vs编辑器主题
    python使用matplotlib绘图 barChart
    Automatic IE Testing With Python
    上网计时小助手
    关于在未安装frontpage 服务扩展的情况下创建web应用程序的问题
    申请加入了sharepoint团队
    Linq学习之旅——LINQ查询表达式
    使用 ASP.NET 创建的 XML Web 服务的概述
    用C#获取硬盘序列号,CPU序列号,网卡MAC地址
  • 原文地址:https://www.cnblogs.com/andong2015/p/4256766.html
Copyright © 2011-2022 走看看