Java-正则表达式

1.正则表达式

   正则表达式就是字符串,按照一定的规则用符号来表示的字符串并操作字符串.。这些符号对应于底层的符号

   好处:简化代码量,降低程序的可读性。

   注意:"\"的使用,少部分的是"\\",单个“\”使用转义后面的字符,大部份是"\\.",转义出"\",再转出"."符号。

            即常用第二种情况,出现两个"\\"

  • 正则表达式定义了字符串的模式
  • 正则表达式可以用来搜索编辑处理文本。
  • 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
  • Java正则表达式和Perl的是最为相似的。

     java.util.regex包主要包括以下三个类:

  • Pattern类:

    pattern对象是一个正则表达式的编译表示。Pattern类没有公共构造方法。要创建一个Pattern对象,你必须首先调用其公共静态编译方法,它返回一个Pattern对象。该方法接受一个正则表达式作为它的第一个参数。

  • Matcher类:

    Matcher对象是对输入字符串进行解释和匹配操作的引擎。与Pattern类一样,Matcher也没有公共构造方法。你需要调用Pattern对象的matcher方法来获得一个Matcher对象。

  • PatternSyntaxException:

    PatternSyntaxException是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

 正则表达式匹配功能:

         boolean matches(String regex);//该字符串是否匹配给定的正则表达式。

public static void main(String []args)
    {
       String s="15833334444"; //检查手机号码
       //[xy]为x或y,[0-9]为0到9中某一个,{9}为重复9次
       boolean b=s.matches("1[358][0-9]{9}");
       boolean b2=s.matches("1[358]\\d{9}");//其中\\d等价于[0-9]
    }

 正则表达式切割功能

           注意:Java的正则表达式中 "." 代表任意单个字符。

           String [] split(String regex);//根据给定的regex切割字符串

   String s1="zhangshan  liao    hq";
       String []ss1=s1.split(" +");//以空格(" ")来切割"+"表示重复一次或以上
       String s2="1234.3433.5354";//
       String []ss2=s2.split("\\.");//以“.”来切割,其中“\\”表示转义出“\”,再转出"."
       //Java用括号()来定义一个组,且自动为其编号【从1开始】,"\\n"表示使用第n个组
       String s3="zhangshankkliaoxxxxxhq"
       //"kk"和"xxxxx"来切割这个字符串,
       //(.)表示一个包含任意字符"."的捕获组,"\\1"表示指向第一个组,"+"重复一次以上
       String s4=s3.split("(.)\\1+");

正则表达式替换功能:

      String replaceAll(String regex,String replacement);//通过给定的正则表达式regex的地方,用replacement替换

      String replaceFirst(String regex,String replacement);//通过给定的正则表达式regex的第一个地方,用replacement替换

 //如何将"kkkkk"替换为"k","xxx"替换为"x"
       String s="zhangshankkkkkliaoxxxhq";
       String s=s.replaceAll("(.)\\1+","$1");//"$"表示引用前面的字符串中某个组即(.)
       //"15800001111"变成"158****1111"
       String s1="15800001111";
       String s1=s1.replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2");
       //可将电话号码分成两个捕获组
       //158对应(\\d{3})和1111对应(\\d{4}),再用$1和$2分别指向它们

 正则表达式获取功能:

           String的matches,split,replaceAll方法其实是调用底层的Matcher类对应的方法。

           String  s="aaaaab";

           boolean b=s.matches("a*b");

         上一句等价于下面:

        String regex="a*b";

        Pattern p = Pattern.compile("a*b");//将字符串"a*b"封装成pattern对象
        Matcher m = p.matcher("aaaaab");//调用Matcher对象,并将操作的“aaaab”传进来
        boolean b = m.matches();//调用了matcher的匹配方法matches();

//如何找出该字符中三个字母的单词如"jia"
       String str="da jia hao,ming tian bu fang jia!"; 
       String regex="\\b[a-z]{3}\\b";
       //任意小写字母组成的3个字母的单词,\\b表示该单词的边界,即将该单词与前后的字符分开
       //1,将正则封装成对象
       Pattern p=Pattern.complie(regex);
       //2,将正则对象获取匹配器对象
       Matcher m=p.matcher(str); 
       //使用Matcher对象的方法对字符串进行操作
       //既然要获取三个字母组成的单词,则可以使用它的find()方法
       //find()只是找到第一个符合条件的单词,
       //用group()方法获取,find()方法找到的单词
       while(m.find())
        {
           System.out.println(m.group());//获取匹配的子序列
        }

 

posted @ 2014-12-31 16:16  beyondbycyx  阅读(167)  评论(0编辑  收藏  举报