您的位置:首页 > 编程语言 > Java开发

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

2015-04-30 10:51 399 查看
一、开发环境和文本编辑器中使用正则表达式

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, b, c]

[a, b, 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[\s\S]+?</a>
        /*Pattern pattern = Pattern.compile("<a[\\s\\S]+?</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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: