加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式(Regular Expression)高级使用(文本编辑器,数据库

发布时间:2020-12-14 01:16:28 所属栏目:百科 来源:网络整理
导读:一、开发环境和文本编辑器中使用正则表达式 eclipse Notepad++ EditPlus UltraEdit 二、数据库中也可以使用正则表达式 Mysq15.5以上 Oracle10g以上 例如: SELECT prod_name FROM products WHERE prod_name REGEXP '.000' .匹配任意字符 三、Java程序中使用

一、开发环境和文本编辑器中使用正则表达式
eclipse
Notepad++

EditPlus
UltraEdit

二、数据库中也可以使用正则表达式
Mysq15.5以上
Oracle10g以上
例如:

SELECT prod_name FROM products WHERE prod_name REGEXP '.000'

.匹配任意字符

三、Java程序中使用正则表达式
相关类位于:java.util.regex包下面

类Pattern:
正则表达式的编译表示形式。
Pattern p=Pattern.compile(r,int); //建立正则表达式,并启用相应模式。

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

package regexp;

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

public class Demo01 {
    public static void main(String[] args) {
        //在这个字符串:dfsdfsd43324,是否符合指定的正则表达式:w+

        //表达式对象
        Pattern pattern = Pattern.compile("w+");

        //创建Matcher对象
        Matcher matcher = pattern.matcher("dfsdfsd&&43324");//尝试将整个字符串序列与该模式匹配

        //boolean yesno = matcher.matches();
        //System.out.println(yesno); //flase

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


        System.out.println(matcher.find());
        System.out.println(matcher.find());
        System.out.println(matcher.find());
        System.out.println(matcher.find());
    }
}

运行结果:
true
true
false
false

package regexp;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
/** * 测试正则表达式基本用法 * @author liguodong * */

public class Demo02 {
    public static void main(String[] args) {
        //在这个字符串:dfsdfsd43324,是否符合指定的正则表达式:w+

        //表达式对象
        Pattern pattern = Pattern.compile("w+");

        //创建Matcher对象
        Matcher matcher = pattern.matcher("dfsdfsd&&43324");//尝试将整个字符串序列与该模式匹配


        /*System.out.println(matcher.find()); System.out.println(matcher.group()); System.out.println(matcher.find()); System.out.println(matcher.group());*/

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

    }
}

运行结果:
dfsdfsd
dfsdfsd
43324
43324

package regexp;

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

/** * 测试正则表达式对象中分组的处理 * @author liguodong * */
public class Demo03 {
    public static void main(String[] args) {
        //表达式对象 分组1 分组2
        Pattern pattern = Pattern.compile("([a-z]+)([0-9]+)");

        //创建Matcher对象
        Matcher matcher = pattern.matcher("aads32&&da43324**dsaf32");//尝试将整个字符串序列与该模式匹配


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

    }
}

运行结果:
aads32
aads
32
da43324
da
43324
dsaf32
dsaf
32

package regexp;

import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/** * 测试正则表达式的对象其他操作 * @author liguodong * */
public class Demo04 {
    public static void main(String[] args) {
        //在这个字符串:dfsdfsd43324,是否符合指定的正则表达式:w+

        //表达式对象
        Pattern pattern = Pattern.compile("[0-9]");

        //创建Matcher对象
        Matcher matcher = pattern.matcher("aads32&&da43324**dsaf32");//尝试将整个字符串序列与该模式匹配
        //替换
        String newString = matcher.replaceAll("#");
        System.out.println(newString);//aads##&&da#####**dsaf##

        ///////////////////////////////////
        //分隔
        String string = "a,b,c";
        String[] arrs = string.split(",");
        System.out.println(Arrays.toString(arrs));

        String string1 = "a32b323c32";
        String[] arrs1 = string1.split("d+");
        System.out.println(Arrays.toString(arrs1));


    }
}

运行结果:
aads##&&da#####**dsaf##
[a,c]
[a,c]

package regexp;

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

/** * 网络爬虫取链接 wget * @author liguodong */
public class WebSpider {
    public static void main(String[] args) {
        String destString = getURLContent("http://www.baidu.com");
        //System.out.println(destString);


        //1、 获取超链接整个内容<a></a>
        //<a[sS]+?</a>
        /*Pattern pattern = Pattern.compile("<a[sS]+?</a>"); Matcher matcher = pattern.matcher(destString); while(matcher.find()){ System.out.println(matcher.group()); }*/

        //2、 获取href的内容
        /*Pattern pattern = Pattern.compile("href=".+?""); Matcher matcher = pattern.matcher(destString); while(matcher.find()){ System.out.println(matcher.group()); }*/

        //3、 获取超链接的地址
        //采用预搜索(零宽断言) 或者 通过程序里面加括号进行分组
        /*Pattern pattern = Pattern.compile("href="(.+?)""); Matcher matcher = pattern.matcher(destString); while(matcher.find()){ System.out.println(matcher.group()); System.out.println(matcher.group(1)); }*/

        List<String> resultList = getMatherSubstrs(destString,"href="(h.+?)"");

        for (String string : resultList) {
            System.out.println(string);
        }




    }

    public static List<String> getMatherSubstrs(String destStr,String regexStr){
        //4、 获取超链接的地址
        //采用预搜索(零宽断言) 或者 通过程序里面加括号进行分组
        Pattern pattern = Pattern.compile(regexStr);        
        Matcher matcher = pattern.matcher(destStr);
        List<String> result = new ArrayList<String>();

        while(matcher.find()){
            /*System.out.println(matcher.group()); System.out.println(matcher.group(1));*/
            result.add(matcher.group(1));
        }   

        return result;
    }



    /** * 获得urlStr网页源码的内容 * @param urlStr * @return */

    public static String getURLContent(String urlStr){
        StringBuilder sb = new StringBuilder();
        try {
            URL url = new URL(urlStr);      
            BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));

            String tempString = "";
            while((tempString=reader.readLine())!=null){
                //System.out.println(tempString);
                sb.append(tempString);
            }

        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return sb.toString();
    }

}

运行结果:
http://www.nuomi.com/?cid=bdsywzl
https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F
http://news.baidu.com
http://www.hao123.com
http://map.baidu.com
http://v.baidu.com
http://tieba.baidu.com
https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F
http://www.baidu.com/gaoji/preferences.html
http://www.baidu.com/more/
http://news.baidu.com/ns?cl=2&rn=20&tn=news&word=
http://tieba.baidu.com/f?kw=&fr=wwwt
http://zhidao.baidu.com/q?ct=17&pn=0&tn=ikaslist&rn=10&word=&fr=wwwt
http://music.baidu.com/search?fr=ps&ie=utf-8&key=
http://image.baidu.com/i?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=
http://v.baidu.com/v?ct=301989888&rn=20&pn=0&db=0&s=25&ie=utf-8&word=
http://map.baidu.com/m?word=&fr=ps01000
http://wenku.baidu.com/search?word=&lm=0&od=0&ie=utf-8
http://home.baidu.com
http://ir.baidu.com
http://www.baidu.com/duty/
http://jianyi.baidu.com/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读