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

来源:互联网 发布:淘宝天刀代购流程 编辑:程序博客网 时间:2024/06/07 02:38

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


正则表达式:

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

好处:正则的出现,可以简化对字符串的复杂操作

特点:用于一些特定的符号来表示一些代码操作,这样就简化书写。所以学习正则表达式,就是在学习一些特殊符号的使用。

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

 

具体操作功能

1.匹配:

boolean matches(String regex) 方法,(告知此字符串是否匹配给定的正则表达式)用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false

校验手机号码

[java] view plaincopy
  1. /* 
  2.   正则表达式,可以匹配尾号5连的手机号。规则: 第1位是1,第二位可以是数字3458其中之一, 
  3.       后面4位任意数字,最后5位为任意相同的数字。 
  4.       例如:18601088888、13912366666 
  5. */  
  6. class  Test9  
  7. {  
  8.     public static void main(String[] args)   
  9.     {  
  10.         String regex="1[3458]\\d{4}(\\d)\\1{4}";  
  11.         System.out.print("输入要检验的手机号码:");         
  12.         Scanner sc=new Scanner(System.in); //接收键盘录入的电话号码,简单尝试IO流              
  13.         boolean b=sc.matches(regex);//调用字符串的matches方法,并将boolean型结果赋给变量b         
  14.        System.out.println("您输入的是"+b+"符合要求的电话号码");  
  15.     }  
  16. }  

 2.切割:

string split(String  reges)根据正则表达式的匹配拆分此字符串

String[]split(String reges,int linit)根据匹配给定的正则表达式来拆分此字符串。

 

splitDemo("zhangsan.lisi.wangwu","\\.");
                          按.切割"."因为.在正则里是任意字符所以要加\,但是一个\还不行,  "."就被转义了所以要加两个
splitDemo("c:\\abc\\a.txt","\\\\");
                           按\\切割 ,一个会被转义,所以前面需要在加一个 也就是\\ \\
splitDemo("erkktyqqquizzzzzo","(.)\\1+");
                             按照叠词完成切割。为了可以让规则的结果被重用
                              可以将规则封装成一个组。用()完成。组的出现都有编号。
                              从1开始。 想要使用已有的组可以通过  \n(n就是组的编号)的形式来获取。
                              如果要是多组组成的话就看左括号
                              例如: ((A)(B(C)))就是4组

3.替换:

String replaceAll(String reges ,String replacement)使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

调用的是代码块中的函数。
String str = "wer1389980000ty1234564uiod234345675f";  
replaceAllDemo(str,"\\d{5,}","#");
                                                将字符串中的数组替换成#。  \\d是所有数字也就是0-9,{5,}代表五个或者五个以上的都替换成#.
 
String str1 = "erkktyqqquizzzzzo";
replaceAllDemo(str1,"(.)\\1+","$1");
                                               将叠词替换成$.  将重叠的字符替换成单个字母。
                                               (.)代表任意字符的组.\\1+代表获取上一个组,$1.是将组替换成一个.比如zzzz->z这个样子的意思

[java] view plaincopy
  1. public static void replaceAllDemo(String str, String reg, String newStr) {  
  2.     str = str.replaceAll(reg, newStr);  
  3.     System.out.println(str);  
  4. }  

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

  操作步骤:

(a)将正则表达式封装成对象,

(b)让正则对象和要操作的字符串相关联

(c)关联后,获取正则匹配引擎

(d)通过引擎对符合规则的子串进行操作,比如取出。

5.网页爬虫

[java] view plaincopy
  1. /* 
  2. 网页爬虫(蜘蛛) 
  3.  */  
  4. import java.io.*;  
  5. import java.util.regex.*;  
  6. import java.net.*;  
  7. import java.util.*;  
  8.   
  9. class RegexTest2 {  
  10.     public static void main(String[] args) throws Exception {  
  11.         getMails_1();  
  12.     }  
  13.   
  14.     // 获取网页上的邮件信息  
  15.     public static void getMails_1() throws Exception {  
  16.         URL url = new URL("http://192.168.1.254:8080/myweb/mail.html");  
  17.   
  18.         URLConnection conn = url.openConnection();  
  19.   
  20.         BufferedReader bufIn = new BufferedReader(new InputStreamReader(  
  21.                 conn.getInputStream()));  
  22.   
  23.         String line = null;  
  24.   
  25.         String mailreg = "\\w+@\\w+(\\.\\w+)+";  
  26.         Pattern p = Pattern.compile(mailreg);  
  27.   
  28.         while ((line = bufIn.readLine()) != null) {  
  29.             Matcher m = p.matcher(line);  
  30.             while (m.find()) {  
  31.                 System.out.println(m.group());  
  32.             }  
  33.         }  
  34.     }  
  35.   
  36.     /* 
  37.      * 获取指定文档中的邮件地址。 使用获取功能。Pattern Matcher 
  38.      */  
  39.     public static void getMails() throws Exception {  
  40.         BufferedReader bufr = new BufferedReader(new FileReader("mail.txt"));  
  41.   
  42.         String line = null;  
  43.   
  44.         String mailreg = "\\w+@\\w+(\\.\\w+)+";  
  45.         Pattern p = Pattern.compile(mailreg);  
  46.   
  47.         while ((line = bufr.readLine()) != null) {  
  48.             Matcher m = p.matcher(line);  
  49.             while (m.find()) {  
  50.                 System.out.println(m.group());  
  51.             }  
  52.         }  
  53.     }  
  54. }  
0 0
原创粉丝点击