您的位置:首页 > 职场人生

黑马程序员-------------------java基础--------------------正则表达式

2015-08-12 13:55 423 查看

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

第一讲  正则表达式概述

1、其实是用来操作字符串的一些规则

 

 1.1、好处:正则的出现,对字符串的复杂操作变得更为简单。

 1.2、特点:将对字符串操作的代码用一些符号来表示。只要使用了指定符号,

         就可以调用底层的代码对字符串进行操作。符号的出现,简化了代码的书写。

 1.3、弊端:符号的出现虽然简化了书写,但是却降低了阅读性。其实更多是用正则解决字符串操作的问题。

 1.4、组:用小括号标示,每定义一个小括号,就是一个组,而且有自动编号,从1开始。

         只要使用组,对应的数字就是使用该组的内容。别忘了,数组要加\\。

2、常见操作

 

 2.1、匹配:其实用的就是String类中的matches方法。

  字符          

  \t             制表符

  \n             换行

  \r             回车符

  \f             换页符

  

  字符类

  [abc]   a、b或c(简单类)

  [^abc]   任何字符,除了a、b或c(否定)

  [a-zA-Z]       a-z或者A-Z,两端字母包含在内

  [a-d[m-p]]      a-d或m-p

  [a-z&&[^bc]]    a-z 除了bc

  预定义字符类

  

  \d             数字[0-9]

  \D             非数字[^0-9]

  \s             空白字符

  \S             非空白字符

  \w             单词字符

  \W             非单词字符

  

  边界器匹配

  

  ^              行的开头

  $              行的结尾

  \b             单词的边界

  \B             非单词的边界

  \A             输入的开头

  \z             输入的结尾

  Greedy数量词

  X?             表示有一次或没有

  X*             标示有0次或多次

  X+             表示有一次或多次

  X{n}           恰好n次

  X{n,}          至少n次

  X{n,m}         至少n次,不超过m次

 2.2 切割:

  其实用的就是String类中的split方法。

  . 表示任意字符,在正则中用加入\\.

  c:\\abc\\dd

  正则中用\\切割时,regex="\\\\"

  按叠词去切割时,为了让规则的结果被重用,可以将规则封装成一个组

  用()表示。组的出现都有标号,从1 开始,想要是已经有的组,可以将规则

  定义成"(.)\\1+"

 2.3、替换:

  其实用的就是String类中的replaceAll();

 2.4,获取:

    1,先要将正则表达式编译成正则对象。使用的是Pattern中静态方法compile(regex);

  2,通过Pattern对象获取Matcher对象。Pattern用于描述正则表达式,可以对正则表达式进行解析。而将规则操作字符串,

       需要从新封装到匹配器对象Matcher中。然后使用Matcher对象的方法来操作字符串。如何获取匹配器对象呢?

       通过Pattern对象中的matcher方法。该方法可以正则规则和字符串想关联。并返回匹配器对象。

  3,使用Matcher对象中的方法即可对字符串进行各种正则操作。

注意 :

 1、想要知道该字符是否正确,使用匹配

 2、想要将一个字符串变成另一个字符串,使用替换

 3、想要将字符串按规则变成多个字符串,用切割

 4、想要拿到符合要求的字符子串,用获取

  

-------------------------------------------------

*/

import java.util.regex.*;

//需求:对qq进行校验,5-15位,0不能开头,不包含字母

/*

class  RegexTest

{

 public static void main(String[] args)

 {

  String qq="012565365371";

  checkQQ1(qq);

  checkQQ2(qq);

 }

 //定义方法对qq校验,运用正则

 public static void checkQQ1(String str)

 {

  //5-15位,0不能开头,不包含字母

  String regex="[1-9][0-9]{4,14}";

  //返回boolean型

  boolean flag=str.matches(regex);

  if(flag)

   System.out.println(str);

  else

   System.out.println("不合法");

  

 }

 //不用正则表达式 

   public static void qqCheck2(String qq) 

   { 

       if (!qq.startsWith("0")) 

       { 

           if (qq.length()>=5&&qq.length()<=15) 

           { 

               try 

               { 

                    Long l=Long.parseLong(qq);//利用封装基本数据类型出现非数字报异常的特点 

     System.out.println(qq); 

               } 

               catch (NumberFormatException e) 

                { 

                    System.out.println("包含非法字符!"); 

                } 

           } 

           else 

               System.out.println("你输入的长度非法!"); 

      } 

       else 

            System.out.println("没有0开头的号码,请重输!"); 

  } 

}

//对比很明显,不用正则非常麻烦。

--------------------------------------------

*/

//切割练习

/*

class  RegexTest

{

 public static void main(String[] args)

 {

  spiltDemo("c:\\abc\\dd","\\\\");

  //按叠词去切割时,为了让规则的结果被重用,可以将规则封装成一个组

  用()表示。组的出现都有标号,从1 开始,想要是已经有的组,可以将规则

  定义成"(.)\\1+

  spiltDemo("dgyggggiiuioookm","(.)\\1+");

 }

 //定义切割方法

 public static void spiltDemo(String str,String regex)

 {

  //按正则来切割

  String []arr=str.spilt(regex);

  for (String s: arr )

  {

   System.out.println(s);

  }

  

 }

}

----------------------------------------------

*/

//替换练习

/*

class  RegexTest

{

 public static void main(String[] args)

 {

  //将连续5个以上数字替换成*

  replaceAllDemo("atdft5365473jhbh","\\d{5,}","*");

  //将重叠部分替换成单个字母

  replaceAllDemo("dystyyyyyifijjjoi","(.)\\1+","$1");

 }

 //定义切割方法

 public static void replaceAllDemo(String str,String regex,String newstr)

 {

  //按正则来切割

  str=str.replaceAll(regex,newstr);

  System.out.println(str);

 }

}

*/

--------------------------------------------------------------

//获取练习

/*

class  RegexTest

{

 public static void main(String[] args)

 {

  String str="ming tian jiu fang jia le ";

  //取出连续的三个字母的单词

  String regex="\\b[a-z]{3}\\b";

  //将规则封装成对象

  Pattern p=Pattern.compile(regex);

  //让规则与要作用的字符串向关联

  Matcher m=p.matcher(str);

  //让规则作用到字符串上

  while (m.find())

  {

   //获取匹配后的结果

   System.out.println(m.group());

  }

 }

}

*/

--------------------------------------------

//将下列字符串转成,我要学编程

/*

class  RegexTest

{

 public static void main(String[] args)

 {

  

  String str="我我...我我我....要要...要要...要学学...学学...学编编...编编....编...程程...程程程";

  str=str.replaceAll("\\.+","");

  str=str.replaceAll("(.)\\1+","$1");

  System.out.println(str);

 }

}

*/

---------------------------------------------

//对邮箱进行校验

/*

class  RegexTest

{

 public static void main(String[] args)

 {

  

  String str="agf123@sina.com";

  String regex="[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";

  System.out.println(str.matches(regex));

  

 }

}

*/

----------------------------------

//网页爬虫

/*

class  RegexTest

{

 public static void main(String[] args)

 {

  BufferedReader br=null;

  try

  {

   br=new BufferedReader(new FileReader("mail.txt"));

   

   String line=null;

   while ((line=br.readLine())!=null)

   {

    String regex="[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";

    ///将规则封装成对象

 
9eda
   Pattern p=Pattern.compile(regex);

    //让规则与要作用的字符串向关联

    Matcher m=p.matcher(line);

    //让规则作用到字符串上

    while (m.find())

    {

     //获取匹配后的结果

     System.out.println(m.group());

    }

   }

  }

   catch (Exception e)

   {

    throw new RuntimeException("读取失败');

   }

  finally

  {

   try

   {

    if(br!=null)

     br.close();

   }

    catch (Exception e)

   {

    throw new RuntimeException("关闭失败');

   }

  

  }

 }

}

*/

       ------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  正则表达式