正则表达式

一,正则表达式基本知识:

操作复杂的文本:

(1)普通字符:

    字母,数字,汉字,下划线,以及没有特殊定义的标点符号,都是“普通字符”。表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。

简单的转义字符:

这里写图片描述

(2)标准字符集合
注意区分大小写,大写是相反的意思

这里写图片描述

(3)自定义字符集合
[]匹配方式,可以匹配方括号中任意一个字符

这里写图片描述

(4)量词

这里写图片描述

(5)字符边界

这里写图片描述

(6)正则语法之选择符和分组以及反向引用。

这里写图片描述

(7)预搜索

这里写图片描述

二,正则表达式匹配模式

这里写图片描述

三,常用正则表达式

这里写图片描述

四,JAVA程序中如何使用正则表达式


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

//一, 测试正则表达式对象的基本用法

public class Demo01 {
    public static void main(String[] args) {
        //在这个字符串:asfsdf23323,是否符合指定的正则表达式:\w+
        //表达式对象
        Pattern p = Pattern.compile("\\w+");
        //创建Matcher对象
        Matcher m = p.matcher("asfsdf2&&3323");
//      boolean yesorno = m.matches();  //尝试将整个字符序列与该模式匹配
//      System.out.println(yesorno);

//      boolean yesorno2 = m.find();    //该方法扫描输入的序列,查找与该模式匹配的下一个子序列
//      System.out.println(yesorno2);

//      System.out.println(m.find());
//      System.out.println(m.group());
//      System.out.println(m.find());
//      System.out.println(m.group());  

        while(m.find()){
            System.out.println(m.group());  //group(),group(0)匹配整个表达式的子字符串
            System.out.println(m.group(0));
        }       
    }
}



//二,正则对象中分组的处理:

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

/**
 * 测试正则表达式对象中分组的处理
 * @author Administrator
 *
 */
public class Demo02 {
    public static void main(String[] args) {
        //在这个字符串:asfsdf23323,是否符合指定的正则表达式:\w+
        //表达式对象
        Pattern p = Pattern.compile("([a-z]+)([0-9]+)");
        //创建Matcher对象
        Matcher m = p.matcher("aa232**ssd445*sds223");

        while(m.find()){
            System.out.println(m.group());  //group(),group(0)匹配整个表达式的子字符串
            System.out.println(m.group(1));
            System.out.println(m.group(2));
        }       
    }
}



//三,正则对象的替换操作

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

/**
 * 测试正则表达式对象的替换操作
 * @author Administrator
 *
 */
public class Demo03 {
    public static void main(String[] args) {
        //表达式对象
        Pattern p = Pattern.compile("[0-9]");
        //创建Matcher对象
        Matcher m = p.matcher("aa232**ssd445*sds223");
        //替换
        String newStr = m.replaceAll("#");
        System.out.println(newStr);     
    }
}



//四,正则对象对分割字符串的操作:

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

/**
 * 测试正则表达式对象的分割字符串的操作
 * @author Administrator
 *
 */
public class Demo04 {
    public static void main(String[] args) {
        String str = "a232b4334c3434";
        String[] arrs = str.split("\\d+");
        System.out.println(Arrays.toString(arrs));  
    }
}

五,正则表达式在JAVA中的应用

//正则主要是处理一下复杂的文本,网络爬虫的原理的代码如下:

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;
/**
 * 网络爬虫取链接  
 * @author Administrator
 *
 */
public class WebSpiderTest {    
    /**
     * 获得urlStr对应的网页的源码内容
     * @param urlStr
     * @return
     */
    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> result = new ArrayList<String>();
        while(m.find()){
            result.add(m.group(1));
        }   
        return result;
    }   
    public static void main(String[] args) {
        String destStr = getURLContent("http://www.163.com","gbk");     
//      Pattern p = Pattern.compile("<a[\\s\\S]+?</a>");        //取到的超链接的整个内容
        List<String> result = getMatherSubstrs(destStr, "href=\"([\\w\\s./:]+?)\"");        
        for (String temp : result) {
            System.out.println(temp);
        }       
    }
}

PS:资料主要来源于尚学堂

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值