1概念

正则表达式(正确的规则,体现是一个表达式)

 正则表达式用于操作字符串数据,通过一些特定的符号来体现的,所以我们为了掌握正则表达式,必须要学习一些符号,虽然简化了,但是阅读性差。

需要使用到java.lang包à

 boolean

matches(String regex)
          告知此字符串是否匹配给定的正则表达式

2作用

正则表达式的作用是为了校验用户输入的字符。

比如校验用户进行注册时的用户名和密码的校验。

代码示例:

package 正则表达式的演示;

 

/*

 * 正则表达式。

 *

 * 正则表达式用于操作字符串数据。

 * 通过一些特定的符号来体现的。

 * 所以我们为了掌握正则表达式,必须要学习一些符号。

 *

 * 虽然简化了,但是阅读性差。

 */

 

 

/*

 * 需求:定义一个功能对QQ号进行校验。

 * 要求:长度5~15. 只能是数字, 0不能开头

 */

public class RegexDemo {

 

     

      public static void main(String[] args) {

 

          

           //使用正则来校验

           String qq = "123k4567";

//         checkQQ(qq);

          

           String regex = "[1-9][0-9]{4,14}";//正则表达式。

          

           boolean b = qq.matches(regex);        

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

          

          

//         String str = "aoooooooob";

//         String reg = "ao{4,6}b";

//         boolean b = str.matches(reg);

//         System.out.println(str+":"+b);

          

          

      }

     

     

      //使用传统的方法来校验

      public static void checkQQ(String qq){

          

           int len = qq.length();.

.

..

 

          

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

                

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

                      try {

                      long l = Long.parseLong(qq);

                     

                      System.out.println(l+":正确");

                      }catch(NumberFormatException e){

                            System.out.println(qq+":含有非法字符");

                      }

                     

                 }else{

                      System.out.println(qq+":不能0开头");

                 }

           }else{

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

           }

          

          

          

      }

 

}

 

 

 

返回结果:

正则表达式的用法

3常见的规则

 boolean

matches(String regex)
          告知此字符串是否匹配给定的。

链接:正则表达式

字符类

[abc]

a、b 或 c(简单类)

[^abc]

任何字符,除了 a、b 或 c(否定)

[a-zA-Z]

a 到 z 或 A 到 Z,两头的字母包括在内(范围)

[a-d[m-p]]

a 到 d 或 m 到 p:[a-dm-p](并集)

[a-z&&[def]]

d、e 或 f(交集)

[a-z&&[^bc]]

a 到 z,除了 b 和 c:[ad-z](减去)

[a-z&&[^m-p]]

a 到 z,而非 m 到 p:[a-lq-z](减去)

 

 

预定义字符类

.

任何字符(与行结束符可能匹配也可能不匹配)

\d

数字:[0-9]

\D

非数字: [^0-9]

\s

空白字符:[ \t\n\x0B\f\r]

\S

非空白字符:[^\s]

\w

单词字符:[a-zA-Z_0-9]

\W

非单词字符:[^\w]

 

Greedy 数量词

X?

X,一次或一次也没有

X*

X,零次或多次

X+

X,一次或多次

X{n}

X,恰好 n

X{n,}

X,至少 n

X{n,m}

X,至少 n 次,但是不超过 m

 

 

Reluctant 数量词

X??

X,一次或一次也没有

X*?

X,零次或多次

X+?

X,一次或多次

X{n}?

X,恰好 n

X{n,}?

X,至少 n

X{n,m}?

X,至少 n 次,但是不超过 m

 

 

 

 

 

数量词的演示

 

代码示例:

/*

            * 演示正则数量词

            *

            *  X? X,一次或一次也没有

            *  X* X,零次或多次

            *  X+ X,一次或多次

            *  X{n} X,恰好 n

            *  X{n,} X,至少 n

            *  X{n,m} X,至少n 次,但是不超过 m

            */

           String str = "aoooooob";

           String reg = "ao{4,6}b";//X{n,m} X,至少n 次,但是不超过 m   46

           boolean c = str.matches(reg);

           System.out.println(str+":"+c);

          

          

      }

 

返回结果:

正则表达式的用法

4常见的功能匹配

 

代码示例:

package 正则功能的使用;

 

import java.util.regex.Matcher;

import java.util.regex.Pattern;

 

/**

 * 正则表达式对字符串的常见操作

 * @author Administrator

 *

 */

public class RegexDemo2 {

 

     

      public static void main(String[] args) {

 

           /*

            * 正则表达式对字符串的常见操作:

            * 1, 匹配。

            *        其实使用的就是String类中的matches方法。

            *

            * 2,切割。

            *        其实使用的就是String类中的split方法。

            *

            * 3,替换。

            *        其实使用的就是String类中的replaceAll()方法。

            *

            * 4,获取。

            *       

            */

//         functionDemo_1();

//         functionDemo_2();

           functionDemo_3();

//         functionDemo_4();

          

      }

     

      /*

       * 获取

       * 将正则规则进行对象的封装。

       * Pattern p = Pattern.compile("a*b");

       *  //通过正则对象的matcher方法字符串相关联。获取要对字符串操作的匹配器对象Matcher .

      * Matcher m = p.matcher("aaaaab");

      * //通过Matcher匹配器对象的方法对字符串进行操作。

      * boolean b = m.matches();

       *

       *

       */

      public  static void functionDemo_4() {

          

           String str = "da jia hao,ming tian bu fang jia!";

          

           String regex = "\\b[a-z]{3}\\b";

          

           //1,将正则封装成对象。

           Pattern p = Pattern.compile(regex);

           //2, 通过正则对象获取匹配器对象。

           Matcher m = p.matcher(str);

          

           //使用Matcher对象的方法对字符串进行操作。

           //既然要获取三个字母组成的单词

           //查找。 find();

           System.out.println(str);

           while(m.find()){

                 System.out.println(m.group());//获取匹配的子序列

                

                 System.out.println(m.start()+":"+m.end());

           }

      }

 

      /*

       * 替换

       */

      public static void functionDemo_3() {

          

           String str = "zhangsanttttxiaoqiangmmmmmmzhaoliu";

          

           str = str.replaceAll("(.)\\1+", "$1");

          

           System.out.println(str);

          

           String tel = "15800001111";//158****1111;

          

           tel = tel.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");

          

           System.out.println(tel);

          

      }

 

      /*

       * 切割。

       *

       * 组:((A)(B(C)))

       */

      public static void functionDemo_2(){

 

           String str = "zhangsan    xiaoqiang             zhaoliu";

          

           String[] names = str.split(" +");//str.split("\\.");

          

           for(String name : names){

                 System.out.println(name);

           }

          

      }

      /*

       * 演示匹配。

       */

      public static void functionDemo_1(){

     

          

           //匹配手机号码是否正确。

           String tel="18270789979" ;

          

           String regex="1[358]\\d{9}";//  \d表示0-9

          

           boolean b =tel.matches(regex);

           System.out.println(tel+""+b);

          

      }

     

 

}

 

 

5.网页爬虫

什么是爬虫?

       网页爬虫:其实就是一个程序用于在互联网中获取符合指定规则的数据。

案例:爬取互联网上的邮箱账号。

代码示例:

package 爬虫;

 

 

import java.io.BufferedReader;

import java.io.FileReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.URL;

import java.util.ArrayList;

import java.util.List;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

 

 

/*

 * 网页爬虫:其实就一个程序用于在互联网中获取符合指定规则的数据。

 *

 * 爬取邮箱地址。

 *

 */

public class RegexTest2 {

 

     

      public static void main(String[] args) throws IOException {

 

          

           List<String> list = getMailsByWeb();

          

           for(String mail : list){

                 System.out.println(mail);

           }

      }

     

      public static List<String> getMailsByWeb() throws IOException {

          

           //1,读取源文件。

//                    BufferedReader bufr = new BufferedReader(new FileReader("c:\\mail.html"));

          

           URL url = new URL("http://www.chinawenben.com/file/6vpczzuz6vowzxuxcwuzowzc_1.html");

          

           BufferedReader bufIn = new BufferedReader(new InputStreamReader(url.openStream()));

                     

           //2,对读取的数据进行规则的匹配。从中获取符合规则的数据.

           String mail_regex = "\\[email protected]\\w+(\\.\\w+)+";

          

           List<String> list = new ArrayList<String>();

          

          

           Pattern p = Pattern.compile(mail_regex);

          

           String line = null;

          

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

                

                 /*Pattern p = Pattern.compile("a*b");

                  Matcher m = p.matcher("aaaaab");

                  boolean b = m.matches();*/

                

                 Matcher m = p.matcher(line);

                 while(m.find()){

                      //3,将符合规则的数据存储到集合中。

                      list.add(m.group());

                 }

                

           }

           return list;

      }

 

      public static List<String>  getMails() throws IOException{

          

           //1,读取源文件。

           BufferedReader bufr = new BufferedReader(new FileReader("c:\\mail.html"));

          

           //2,对读取的数据进行规则的匹配。从中获取符合规则的数据.

           String mail_regex = "\\[email protected]\\w+(\\.\\w+)+";

          

           List<String> list = new ArrayList<String>();

          

          

           Pattern p = Pattern.compile(mail_regex);

          

           String line = null;

          

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

                

                 Matcher m = p.matcher(line);

                 while(m.find()){

                      //3,将符合规则的数据存储到集合中。

                      list.add(m.group());

                 }

                

           }

           return list;

          

      }

 

}

 

 

相关文章:

  • 2021-10-19
  • 2022-12-23
  • 2021-06-04
  • 2022-12-23
  • 2021-11-22
  • 2021-11-03
  • 2022-01-28
猜你喜欢
  • 2022-12-23
  • 2021-11-18
  • 2022-02-15
相关资源
相似解决方案