正则表达式

来源:互联网 发布:linux目录权限 编辑:程序博客网 时间:2024/05/20 08:27

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

操作复杂的文本:(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
原创粉丝点击