ErBing

往事已经定格,未来还要继续。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

来源:http://www.bjsxt.com/ 
一、正则表达式01_介绍、标准字符集合、自定义字符集合

Regular Expression或Regex 

RegexBuddy 

语法(1) 

语法(2) 

语法(3) 

二、正则表达式02_量词、贪婪和非贪婪模式

语法(4) 

几个常用的非贪婪匹配Pattern
    *? 重复任意次,但尽可能少重复
    +? 重复1次或更多次,但尽可能少重复
    ?? 重复0次或1次,但尽可能少重复
    {n,m}? 重复n到m次,但尽可能少重复
    {n,}? 重复n次以上,但尽可能少重复

三、正则表达式03_字符边界、匹配模式(单行和多行模式)

语法(5) 

正则表达式的匹配模式 

四、正则表达式04_分支结构、捕获组、非捕获组、反向引用

语法(6) 

五、正则表达式05_预搜索、零宽断言(4个语法结构)

语法(7) 

六、正则表达式06_电话号码、手机号码、邮箱、常用表达式

练习1 

  格式:010-88889999   0373-8888858   13508888888

  (0\d{2,3}-\d{7,9})|(1[35-9]\d{9})

练习2 

  [\w\-]+@[a-z0-9A-Z]+(\.[a-zA-Z]{2,4}){1,2}

网络上的 

七、正则表达式07_正则表达式、开发环境、文本编辑器中使用

八、正则表达式08_正则表达式、JAVA编程中使用、查找、替换、分割

 1 package com.test.regularExpression;
 2 
 3 import java.util.regex.Matcher;
 4 import java.util.regex.Pattern;
 5 
 6 /**
 7  * 测试正则表达式对象的基本用法
 8  */
 9 public class Demo01 {
10     public static void main(String[] args) {        
11         //在这个字符串:ssf9798,是否符合指定的正则表达式:\w+
12 
13         //表达式对象
14         Pattern p = Pattern.compile("\\w+");
15 
16         //创建Matcher对象
17 //      Matcher m = p.matcher("ssf99798");  //尝试将整个字符序列与该模式匹配
18         Matcher m = p.matcher("ssss9&&oou433");
19 
20         boolean yesorno = m.matches();
21         System.out.println(yesorno);    //ssf99798为true,ssss9&&oou433为false
22 
23         boolean yesorno2 = m.find();    //扫描输入的序列,查找与该模式匹配的下一个子序列
24         //m.matches()为true,匹配完了,则m.find()从字符序列最后位置匹配,为false
25         //m.matches()为false,则m.find()从字符序列开始位置匹配,为true
26         System.out.println(yesorno2);   //当前为true
27 
28         System.out.println("=====单单测试find()======================================");
29         Pattern p2 = Pattern.compile("\\w+");
30         Matcher m2 = p2.matcher("ssss9&&oou433");
31 //      System.out.println(m2.find());  //true
32 //      System.out.println(m2.find());  //true
33 //      System.out.println(m2.find());  //false
34 
35         while(m2.find()){
36             //group()和group(0)都是匹配整个表达式的子字符串,所以打印内容一样
37             //第一次打印ssss9,第二次打印oou433
38             System.out.println(m2.group()); 
39             System.out.println(m2.group(0));
40         }
41     }
42 }
 1 package com.test.regularExpression;
 2 
 3 import java.util.regex.Matcher;
 4 import java.util.regex.Pattern;
 5 
 6 /**
 7  * 测试正则表达式对象中分组的处理
 8  */
 9 public class Demo02 {
10     public static void main(String[] args) {        
11         Pattern p = Pattern.compile("([a-z]+)([0-9]+)");    //有两个分组:([a-z]+)    与   ([0-9]+)
12         Matcher m = p.matcher("df43**dfdf545**fdg99");
13 
14         while(m.find()){
15             System.out.println("====整个子序列=============");
16             System.out.println(m.group());
17             System.out.println("========子序列的分组===================");
18             System.out.println(m.group(1)); //([a-z]+)
19             System.out.println(m.group(2)); //([0-9]+)
20         }
21     }
22 }
 1 package com.test.regularExpression;
 2 
 3 import java.util.regex.Matcher;
 4 import java.util.regex.Pattern;
 5 
 6 /**
 7  * 测试正则表达式对象的替换字符串操作
 8  */
 9 public class Demo03 {
10     public static void main(String[] args) {
11         Pattern p = Pattern.compile("[0-9]");
12         Matcher m = p.matcher("aa33**dfd89*dfd87");
13 
14         //替换
15         String newStr = m.replaceAll("#");
16         System.out.println(newStr); //aa##**dfd##*dfd##
17     }
18 }
 1 package com.test.regularExpression;
 2 
 3 import java.util.Arrays;
 4 
 5 /**
 6  * 测试正则表达式对象的分割字符串操作
 7  */
 8 public class Demo04 {
 9     public static void main(String[] args) {
10         String str = "a,b,c";
11         String[] arrs = str.split(",");
12         System.out.println(Arrays.toString(arrs));  //[a, b, c]
13 
14         String str2 = "a9879b8978c9768";
15         String[] arrs2 = str2.split("\\d+");
16         System.out.println(Arrays.toString(arrs2)); //[a, b, c]
17     }
18 }

九、正则表达式09_正则表达式、手写网络爬虫、基本原理、乱码处理

 1 package com.test.regularExpression;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStreamReader;
 6 import java.io.UnsupportedEncodingException;
 7 import java.net.MalformedURLException;
 8 import java.net.URL;
 9 import java.nio.charset.Charset;
10 import java.util.ArrayList;
11 import java.util.List;
12 import java.util.regex.Matcher;
13 import java.util.regex.Pattern;
14 
15 /**
16  * 网络爬虫取链接(可以不用自己写,已有相关产品,如wget)
17  */
18 public class WebSpider {
19     public static void main(String[] args) {
20         String destResult = getURLContent("http://www.163.com","gbk");
21 
22         List<String> result = getMatcherSubStr(destResult, "href=\"([\\w\\s./:]+?)\"");
23 
24         for (String temp : result) {
25             System.out.println(temp);
26         }
27     }
28 
29     /**
30      * 获得urlStr对应网页的源码内容 
31      * @param urlStr
32      * @return
33      */
34     public static String getURLContent(String urlStr,String charset){
35         StringBuilder sb = new StringBuilder();
36         try {
37             URL url = new URL(urlStr);
38 
39             BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(),Charset.forName(charset)));
40 
41             String temp = "";
42             while((temp=reader.readLine())!=null){
43 //              System.out.println(temp);
44                 sb.append(temp);
45                 sb.append("\n");
46             }
47         } catch (MalformedURLException e) {
48             e.printStackTrace();
49         } catch (UnsupportedEncodingException e) {
50             e.printStackTrace();
51         } catch (IOException e) {
52             e.printStackTrace();
53         }
54         return sb.toString();
55     }
56 
57     public static List<String> getMatcherSubStr(String destStr,String regexStr){
58         Pattern p = Pattern.compile(regexStr);  //取到的超链接的地址
59 
60         Matcher m = p.matcher(destStr);
61         List<String> result = new ArrayList<String>();
62         while(m.find()){
63             result.add(m.group(1));   //正则表达式中使用了()分组,所以是1
64         }
65         return result;
66     }
67 }

 

posted on 2016-08-24 15:16  ErBing  阅读(998)  评论(0编辑  收藏  举报