黑马程序员_JAVA_正则表达式

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

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

       作用:   用于专门操作字符串
       特点:  用一些特定符号表示一些代码操作,简化书写

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

验证QQ号
     public static void checkQQ()
     {
          String qq = "674143143";
          int len = qq.length();
          if(len>=5 && len<=15)
          {
               if(!qq.startsWith("0"))
               {
                    try{
                         long l = Long.parseLong(qq);
                    }
                    catch(NumberFormatException e)
                    {
                         System.out.println("出现非法字符");
                    }              
               }
          }
     }


用正则表达式能简化验证过程

常用规则
[abc]中定义一个位置可能出现的字符
[^abc]除了abc
[a-zA-Z]所有字母,[a-d[m-p]]并集[a-z&&[sgf]]取交集[a-z&&[^c-i]]

预定义中的'\'要成对出现,因为需要转义

\d数字
\D非数字
\w数字字母下划线
\W非(数字字母下划线)

数量词
X?一次或一次也没有
X*零次或多次
X+一次或多次
X{n,m}至少n次,不超过m次
X{n},X{n,}

.表示任意字符,"\\."表示实际的'.';

可以将规则进行封装成组
(()(()()))多个组时,判断是第几个组,只需要数是第几个'(';

具体操作功能:

1.匹配:String matchs方法

     public static void checkQQ()
     {
          String qq = "564643356";
          String regex = "[1-9][0-9]{4,14}";
          boolean flag = qq.matches(regex);
          if(flag)
               System.out.println(qq+"验证通过");
          else
               System.out.println(qq+"不合法");
     }
}

2.切割:String split()

     splitDemo("c:\\as\\dgd.log","\\\\");//'\'用来转义'
     splitDemo("akhsffklhgjjdshaaagls","(.)\\1+");//用叠词切割,用到了组的概念

     public static void splitDemo(String str,String reg)
     {
          String[] arr = str.split(reg);
         
          for(String s : arr)
          {
               System.out.println(s);
          }
     }


3.替换:String replaceAll()

     String str = "as554s65ssg454546sa";
     str.replace("\\d{5,}","*");
     str.replace("(.)\\1+","$1");//$1拿前一个规则中的第一个组

4.获取:将字符串中符合规则的字串取出

1.将正则表达式封装成对象
2.让正则表达式对象和要操作的字符串相关联,获取匹配器对象
3.关联后,取出正则匹配引擎
4.通过引擎对符合规则的字串进行操作,比如取出


     public static void getDemo()
     {
          String str = "ming tian hui chi rou ma ";
          String reg = "\\b[a-z]{3}\\b";//'\b'单词边界
          //规则封装成对象
          Pattern p = Pattern.compile();
          //对象与要操作的字符串关联,获取匹配器对象
          Matcher m = p.matcher(str);
          //只有find后才能取,一次取一个子串
          while(m.find())
          {
               System.out.println(m.group());
          }

正则表达式中"\"要成对出现
m.find()将规则作用到字符串上,并进行符合规则的子串查找
group()方法用于获取匹配后的结果,只有find后才能取
end(),start();获得子串的索引位置
匹配是拿规则依次在原字符串进行查找
matches();是否符合规则,返回真假,会移动匹配器的指针

网页爬虫(蜘蛛)

class netSpider{
        public static void main(String[] args) throws IOException{
              URL url = new URL("http://baike.baidu.com/view/118321.htm" );//获取URL对象
              URLConnection conn = url.openConnection();//打开连接
              
              Pattern p = Pattern. compile("\\w+@\\w+(\\.\\w+)+");
              
              BufferedReader bufr = new BufferedReader(new InputStreamReader(conn.getInputStream()));
              BufferedWriter bufw = new BufferedWriter(new FileWriter("cd.txt"));
              String line = null;
               while((line=bufr.readLine())!=null){
                     Matcher m = p.matcher(line);
                      while(m.find()){
                           System. out.println(m.group());
                           bufw.write(m.group());
                           bufw.newLine();
                     }
              }
              bufr.close();
              bufw.close();
       }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值