1. 程式人生 > >正則表示式(Regular Expression)高階使用(文字編輯器,資料庫,Java)

正則表示式(Regular Expression)高階使用(文字編輯器,資料庫,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, 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();
    }

}