黑马程序员——正则表达式

来源:互联网 发布:qemu源码分析笔记 编辑:程序博客网 时间:2024/05/08 17:07


------- android培训java培训、期待与您交流! ----------




正则表达式


软件包 java.util.regex


用于匹配字符序列与正则表达式指定模式的类。 


正则表达式:符合一定规则的表达式。


作用:用于专门操作字符串。


特点:用一些特定的符号来表示一些代码操作,这样就简化书写。


所以学习正则表达式,就是在学习一些特殊符号的使用。


好处:可以简化对字符串的复杂操作。


弊端:符号定义越多,正则越长,阅读性越差。 


具体操作功能:

1、匹配:String matches()方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false.

2、切割:String split(); 不能用.点直接切割,点是正则表达式的特殊字符,代表任意字符,必须转义\\.

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

()完成,组的出现都有编号。从1开始,想要使用已有的组可以通过\n(n就是组的编号)的形式来获取。

3、替换:String replaceAll();

正则表达式的第四个功能。

4、获取:将字符串中符合规则的子串取出。 


操作步骤:

1、将正则表达式封装成对象

2、让正则对象和要操作的字符串相关联

3、关联后,获取正则匹配引擎

4、通过引擎对符合规则的子串进行操作,比如取出


图例:


具体操作练习:


QQ号码进行校验

需求:5~15 0不能开头只能是数字。

这种方式是使用了String类中的方法进行组合完成了需求,但是代码过于复杂。

class RegexDemo

{

                 publicstatic void main(String[] args)

                 {

                    //splitDemo("wangwu.zhangsa.lisi","\\.");

                    //splitDemo("c:\\abc\\a.txt",\\\\);

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

                    //()完成,组的出现都有编号。从1开始,想要使用已有的组可以通过\n(n就是组的编号)的形式来获取。

                    //splitDemo("dhfddejioehskkdewew","(.)\\1+");//使用组来切割 1后面引用前面的字符,前后一致。

                    //将字符串的的数字替换成#

                    Stringstr = "wer235433433ty343423434ueihd34354345";

                    //replaceAllDemo(str,"\\d{5,}","#");

                    //将叠词替换成*

                    Stringstr1 = "djfkjdkkdfkehkeeeehfkhe";

                    //replaceAllDemo(str1,"(.)\\1+","*");

                    //将叠词替换成单个字符,用美元符号去获取组

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

                 }

                 publicstatic void replaceAllDemo(String str,String Regx,String newStr)

                 {

                    str= str.replaceAll(Regx,newStr);

                    System.out.println(str);

                 }

                 publicstatic void splitDemo(String str,String Regx)

                 {        

                    //StringRegx = " +";//用空格切割

                    //StringRegx = "\\.";//不能直接用.必须转义

                    String[]arr = str.split(Regx);

                    for(Strings : arr)

                    {

                           System.out.println(s);

                    }

                 }

                 /*匹配

                 手机号段只有 13xxx 15xxx 18xxx

                 */

                 publicstatic void checkTel()

                 {

                    Stringtel = "13304638463";

                    StringtelReg = "1[358]\\d{9}";

                    System.out.println(tel.matches(telReg));

                 }

                 publicstatic void checkQQ_2()

                 {

                    Stringqq = "013333";

                    //Stringregex = "[1-9][0-9]{4,14}";

                    Stringregex = "[1-9]\\d{4,14}";

                    booleanflag = qq.matches(regex);

                    if(flag)

                           System.out.println("qq:"+qq);

                    else

                           System.out.println("出现非法字符");

                 }

                 publicstatic void checkQQ_1()

                 {

                    Stringqq = "12334354";

                    intlen = qq.length();

                    if(len>=5&& len<=15)

                    {

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

                           {

                                  try

                                  {

                                         longl = Long.parseLong(qq);

                                         System.out.println("qq:"+l);

                                  }

                                  catch(NumberFormatException e)

                                  {

                                         System.out.println("出现非法字符");

                                  }                       

                           }

                           else

                           {

                                  System.out.println("不可以0开头");

                           }

                    }

                    else

                    {

                           System.out.println("长度错误");

                    }

                 }

}

 


练习:


网页爬虫(蜘蛛)

import java.io.*;

import java.util.regex.*;

import java.net.*;

class RegexTest2

{

                 publicstatic void main(String[] args) throws Exception

                 {

                    getMails();

                 }

                 publicstatic void getMails() throws Exception

                 {

                    URLurl = new URL(http://192.168.1.102:8080/myweb/mail.html);

                    URLConnectionconn = url.openConnection();

                    BufferedReaderbufIn = new BufferedReader(new InputStreamReader(conn.getInputStream()));

                    Stringline = null;

                    Stringmailreg = "\\w+@\\w+(\\.\\w+)+";

                    Patternp = Pattern.compile(mailreg);

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

                    {

                           Matcherm = p.matcher(line);

                           while(m.find())

                           {

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

                           }

                    }

                 }

                 /*

                 获取指定文档中的邮件地址

                 使用获取功能Pattern Matcher

                 */

                 publicstatic void getMails() throws Exception

                 {

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

                    Stringline = null;

                    Stringmailreg = "\\w+@\\w+(\\.\\w+)+";

                    Patternp = Pattern.compile(mailreg);

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

                    {

                           Matcherm = p.matcher(line);

                           while(m.find())

                           {

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

                           }

                    }

                 }

}


 



0 0