Java之正则表达式使用

一、相关类:

java.util.regex包

  • Pattern:

    • 正则表达式的编译表示形式。
    • Pattern p = Pattern.compile(r,int)
  • Matcher:

    • 通过解释Pattern对characher sequence执行匹配操作的引擎
    • Matcher m = p.matcher(str) 匹配str字符串

二、代码示例:

一、测试正则表达式对象的基本用法:
package com.hezeu.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* @Classname Demo01
* @Description 测试正则表达式对象的基本用法
* @Date 2020/3/1 上午 01:48
* @Created by 朱进博 [email protected]
*/
public class Demo01 {
        public static void main(String[] args) {
                Pattern p = Pattern.compile("\\w+");  //表达式对象
                Matcher m1 = p.matcher("fsadfsfjkglas3412334123443");  //字符序列对象
                Matcher m2 = p.matcher("fsadf&&341233443");  //字符序列对象
                System.out.println(m1.matches());  //尝试整个字符序列与表达式进行匹配
                System.out.println(m2.find());  //查找一个子序列,结果为true
                System.out.println(m2.group());  //返回查询到的子序列,结果为fsadf
                System.out.println(m2.find());
                System.out.println(m2.group());
                while(m2.find()){
                        System.out.println(m2.group());  //group()、group(0) 匹配整个表达式的子字符串
                        System.out.println(m2.group(0));
                }
		}
}

结果如下:

在这里插入图片描述

二、测试正则表达式中分组的处理:
package com.hezeu.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* @Classname Demo02
* @Description 测试正则表达式中分组的处理
* @Date 2020/3/1 上午 10:54
* @Created by 朱进博 [email protected]
*/
public class Demo02 {
        public static void main(String[] args) {
                Pattern p = Pattern.compile("([a-z]+)([0-9]+)");
                Matcher m = p.matcher("aa232**ssd445*sds223");
                while(m.find()){
                        System.out.println(m.group(1));
                        System.out.println(m.group(2));
                }
        }
}

结果如下:
在这里插入图片描述

三、测试正则表达式替换操作:
package com.hezeu.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* @Classname Demo03
* @Description 测试正则表达式替换操作
* @Date 2020/3/1 上午 10:57
* @Created by 朱进博 [email protected]
*/
public class Demo03 {
        public static void main(String[] args) {
                Pattern p = Pattern.compile("[0-9]");
                Matcher m = p.matcher("aa232**ssd445*sds223");
                //替换
                String newStr = m.replaceAll("#");
                System.out.println(newStr);
        }
}

结果如下:

在这里插入图片描述

四、测试正则表达式分割字符串操作:
package com.hezeu.regex;

import java.util.Arrays;

/**
* @Classname Demo04
* @Description 测试正则表达式分割字符串操作
* @Date 2020/3/1 上午 11:01
* @Created by 朱进博 [email protected]
*/
public class Demo04 {
        public static void main(String[] args) {
                String str = "a232b4334c3434";
                String[] arrs = str.split("\\d+");
                System.out.println(Arrays.toString(arrs));
        }
}

结果如下:

在这里插入图片描述

三、模拟网络爬虫取网页链接:

package com.hezeu.regex;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* @Classname WebSpiderTest02
* @Description 封装网络爬虫(取出网站中的链接)
* @Date 2020/3/1 下午 12:58
* @Created by 朱进博 [email protected]
*/
public class WebSpiderTest02 {
        public static String getUrlContent(String urlStr,String charset){
                StringBuilder sb = new StringBuilder();
                try {
                        URL url = new URL(urlStr);
                        BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(),Charset.forName(charset)));
                        String temp="";
                        while((temp=reader.readLine())!=null){
                                sb.append(temp);
                        }
                } catch (MalformedURLException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }
                return sb.toString();
        }

        public static List<String> getMatherSubstrs(String destStr,String regexStr){
                Pattern p = Pattern.compile(regexStr);
                Matcher m = p.matcher(destStr);
                List<String>  list = new ArrayList<>();
                while (m.find()) {
                        list.add(m.group(1));
                }
                return list;
        }

        public static void main(String[] args) {
                String destStr = getUrlContent("http://www.163.com","gbk");
                List<String> list = getMatherSubstrs(destStr,"href=\"((https://|http://)[\\s\\S]+?)\"");
                for (String src :
                                list) {
                        System.out.println(src);
                }
        }
}

运行结果如下:

在这里插入图片描述

感谢阅读,水平有限,如有错漏,还请不吝赐教

发布了26 篇原创文章 · 获赞 17 · 访问量 2896

猜你喜欢

转载自blog.csdn.net/weixin_44789225/article/details/104590843