正则



 正则表达式

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

    好处:可以简化对字符串的复杂操作。
    弊端:符号定义越多,正则越长,阅读性越差。


具体操作功能:

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

2,切割:String split();

3,替换:String replaceAll(regex,str);如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中的已有的组。
字符类
[abc] ab 或 c(简单类)
[^abc] 任何字符,除了 ab 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]] a 到 d 或 m 到 p[a-dm-p](并集)
[a-z&&[def]] de 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c[ad-z](减去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p[a-lq-z](减去)
Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]  注意\d 是转义字符使用时要\\d  下面的都是这样
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
注意\d 是特殊字符使用时要\\d使其变成转义字符  下面的都是这样  自己设置的转义字符都是 \.变成转义一个新的字符再\\.变成转义字符
匹配
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  public static void checkTel()
     {
         String tel =  "16900001111" ;
         String telReg =  "1[358]\\d{9}"
         System.out.println(tel.matches(telReg));
     }
 
     public static void demo()
     {
         String str =  "b23a23456789" ;
 
         String reg =  "[a-zA-Z]\\d*" ;  
 
         boolean b= str.matches(reg);
         System.out.println(b);
     }
/*
     需求:对邮件地址进行校验。

    */
    public static void checkMail()
    {
        String mail = " abc12@sina.com";

        mail = " 1@1.1";

        String reg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";//较为精确的匹配。 (\\.[a-zA-Z]+)+封装成组一次或多次
        reg = "\\w+@\\w+(\\.\\w+)+";//相对不太精确的匹配。

        //mail.indexOf("@")!=-1


        System.out.println(mail.matches(reg));
    }

切割
1
2
3
4
5
6
7
8
9
10
11
public static void splitDemo(String str,String reg)
     {
         
         //String reg = " +";//按照多个空格来进行切割
         String[] arr = str.split(reg);  
         System.out.println(arr.length);
         for (String s : arr)
         {
             System.out.println(s);
         }
     }
           splitDemo("zhangsan.lisi.wangwu","\\.");
        splitDemo("c:\\abc\\a.txt","\\\\");
        splitDemo("erkktyqqquizzzzzo","(.)\\1+");  
                                                   //按照叠词完成切割。为了可以让规则的结果被重用
                                                   //可以将规则封装成一个组。用()完成。组的出现都有编号。
                                                   //从1开始。 想要使用已有的组可以通过  \n(n就是组的编号)的形式来获取。注意要转义字                                                     符所以\\1
替换
1
2
3
4
5
6
public static void replaceAllDemo(String str,String reg,String newStr)
     {
         str = str.replaceAll(reg,newStr);
 
         System.out.println(str);
     }
       String str = "wer1389980000ty1234564uiod234345675f";//将字符串中的数组替换成#。

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

        String str1 = "erkktyqqquizzzzzo";//.  //将重叠的字符替换成单个字母。zzzz->z
        replaceAllDemo(str1,"(.)\\1+","$1");  $是特殊字符可以表示组  若要使用$则用//$
获取
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*
正则表达式的第四个功能。
4,获取:将字符串中的符合规则的子串取出。
 
操作步骤:
1,将正则表达式封装成对象。
2,让正则对象和要操作的字符串相关联。
3,关联后,获取正则匹配引擎。
4,通过引擎对符合规则的子串进行操作,比如取出。

*/
import java.util.regex.*;
 
class RegexDemo2 
{
     public static void main(String[] args) 
     {
         getDemo();
     }
     public static void getDemo()
     {
         String str =  "ming tian jiu yao fang jia le ,da jia。" ;
         System.out.println(str);
         String reg =  "\\b[a-z]{4}\\b" ;
 
         //将规则封装成对象。
         Pattern p = Pattern.compile(reg);
 
         //让正则对象和要作用的字符串相关联。获取匹配器对象。
         Matcher m  = p.matcher(str);
 
         System.out.println(m.matches()); //其实String类中的matches方法。用的就是Pattern和Matcher对象来完成的。
                                         //只不过被String的方法封装后,用起来较为简单。但是功能却单一。
         while (m.find()) //将规则作用到字符串上,并进行符合规则的子串查找
         {
             System.out.println(m.group()); //(m.group());//用于获取匹配后结果。
             System.out.println(m.start()+ "...." +m.end());
         }
     }
}

网页爬虫
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class RegexTest2 
{
     public static void main(String[] args) throws Exception
     {
         getMails_1();
     }
 
 
     public static void getMails_1()throws Exception
     {
         URL url =  new  URL( "http://192.168.1.254:8080/myweb/mail.html" );
 
         URLConnection conn = url.openConnection();
 
         BufferedReader bufIn =  new  BufferedReader( new  InputStreamReader(conn.getInputStream()));
         
         String line =  null ;
 
         String mailreg =  "\\w+@\\w+(\\.\\w+)+" ;
         Pattern p = Pattern.compile(mailreg);
 
         
 
         while ((line=bufIn.readLine())!= null )
         {
             Matcher m = p.matcher(line);
             while (m.find())
             {
                 System.out.println(m.group());
             }
         }
     }
 正则表达式

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

    好处:可以简化对字符串的复杂操作。
    弊端:符号定义越多,正则越长,阅读性越差。


具体操作功能:

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

2,切割:String split();

3,替换:String replaceAll(regex,str);如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中的已有的组。
字符类
[abc] ab 或 c(简单类)
[^abc] 任何字符,除了 ab 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]] a 到 d 或 m 到 p[a-dm-p](并集)
[a-z&&[def]] de 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c[ad-z](减去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p[a-lq-z](减去)
Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]  注意\d 是转义字符使用时要\\d  下面的都是这样
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
注意\d 是特殊字符使用时要\\d使其变成转义字符  下面的都是这样  自己设置的转义字符都是 \.变成转义一个新的字符再\\.变成转义字符
匹配
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  public static void checkTel()
     {
         String tel =  "16900001111" ;
         String telReg =  "1[358]\\d{9}"
         System.out.println(tel.matches(telReg));
     }
 
     public static void demo()
     {
         String str =  "b23a23456789" ;
 
         String reg =  "[a-zA-Z]\\d*" ;  
 
         boolean b= str.matches(reg);
         System.out.println(b);
     }
/*
     需求:对邮件地址进行校验。

    */
    public static void checkMail()
    {
        String mail = " abc12@sina.com";

        mail = " 1@1.1";

        String reg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";//较为精确的匹配。 (\\.[a-zA-Z]+)+封装成组一次或多次
        reg = "\\w+@\\w+(\\.\\w+)+";//相对不太精确的匹配。

        //mail.indexOf("@")!=-1


        System.out.println(mail.matches(reg));
    }

切割
1
2
3
4
5
6
7
8
9
10
11
public static void splitDemo(String str,String reg)
     {
         
         //String reg = " +";//按照多个空格来进行切割
         String[] arr = str.split(reg);  
         System.out.println(arr.length);
         for (String s : arr)
         {
             System.out.println(s);
         }
     }
           splitDemo("zhangsan.lisi.wangwu","\\.");
        splitDemo("c:\\abc\\a.txt","\\\\");
        splitDemo("erkktyqqquizzzzzo","(.)\\1+");  
                                                   //按照叠词完成切割。为了可以让规则的结果被重用
                                                   //可以将规则封装成一个组。用()完成。组的出现都有编号。
                                                   //从1开始。 想要使用已有的组可以通过  \n(n就是组的编号)的形式来获取。注意要转义字                                                     符所以\\1
替换
1
2
3
4
5
6
public static void replaceAllDemo(String str,String reg,String newStr)
     {
         str = str.replaceAll(reg,newStr);
 
         System.out.println(str);
     }
       String str = "wer1389980000ty1234564uiod234345675f";//将字符串中的数组替换成#。

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

        String str1 = "erkktyqqquizzzzzo";//.  //将重叠的字符替换成单个字母。zzzz->z
        replaceAllDemo(str1,"(.)\\1+","$1");  $是特殊字符可以表示组  若要使用$则用//$
获取
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*
正则表达式的第四个功能。
4,获取:将字符串中的符合规则的子串取出。
 
操作步骤:
1,将正则表达式封装成对象。
2,让正则对象和要操作的字符串相关联。
3,关联后,获取正则匹配引擎。
4,通过引擎对符合规则的子串进行操作,比如取出。

*/
import java.util.regex.*;
 
class RegexDemo2 
{
     public static void main(String[] args) 
     {
         getDemo();
     }
     public static void getDemo()
     {
         String str =  "ming tian jiu yao fang jia le ,da jia。" ;
         System.out.println(str);
         String reg =  "\\b[a-z]{4}\\b" ;
 
         //将规则封装成对象。
         Pattern p = Pattern.compile(reg);
 
         //让正则对象和要作用的字符串相关联。获取匹配器对象。
         Matcher m  = p.matcher(str);
 
         System.out.println(m.matches()); //其实String类中的matches方法。用的就是Pattern和Matcher对象来完成的。
                                         //只不过被String的方法封装后,用起来较为简单。但是功能却单一。
         while (m.find()) //将规则作用到字符串上,并进行符合规则的子串查找
         {
             System.out.println(m.group()); //(m.group());//用于获取匹配后结果。
             System.out.println(m.start()+ "...." +m.end());
         }
     }
}

网页爬虫
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class RegexTest2 
{
     public static void main(String[] args) throws Exception
     {
         getMails_1();
     }
 
 
     public static void getMails_1()throws Exception
     {
         URL url =  new  URL( "http://192.168.1.254:8080/myweb/mail.html" );
 
         URLConnection conn = url.openConnection();
 
         BufferedReader bufIn =  new  BufferedReader( new  InputStreamReader(conn.getInputStream()));
         
         String line =  null ;
 
         String mailreg =  "\\w+@\\w+(\\.\\w+)+" ;
         Pattern p = Pattern.compile(mailreg);
 
         
 
         while ((line=bufIn.readLine())!= null )
         {
             Matcher m = p.matcher(line);
             while (m.find())
             {
                 System.out.println(m.group());
             }
         }
     }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值