java基礎-Regex

來源:互聯網
上載者:User

標籤:int   模式   就是   ace   return   結果   ret   除了   ababc   

1. Regex規則     

字元    x 字元 x。舉例:‘a‘表示字元a    \\ 反斜線字元。    \n 新行(換行)符 (‘\u000A‘)     \r 斷行符號符 (‘\u000D‘)    字元類    [abc] a、b 或 c(簡單類)     [^abc] 任何字元,除了 a、b 或 c(否定)     [a-zA-Z] a到 z 或 A到 Z,兩頭的字母包括在內(範圍)     [0-9] 0到9的字元都包括    預定義字元類    . 任何字元。我的就是.字元本身,怎麼表示呢? \.    \d 數字:[0-9]    \D 非數字:[^\d]/[^0-9]    \w 單詞字元:[a-zA-Z_0-9]   \W 非字元[^\w]邊界匹配器    ^ 行的開頭     $ 行的結尾     \b 單詞邊界, 就是不是單詞字元的地方。    Greedy 數量詞     X? X,一次或一次也沒有    X* X,零次或多次    X+ X,一次或多次    X{n} X,恰好 n 次     X{n,} X,至少 n 次     X{n,m} X,至少 n 次,但是不超過 m 次  運算子   XY       X後跟 Y   X|Y   X 或 Y   (X)   X,作為擷取的群組 

 

package com.zwj.string;import java.util.regex.MatchResult;import java.util.regex.Matcher;import java.util.regex.Pattern;public class MatcherDemo {    public static void main(String[] args) {         //userStringRegular();        //userMatcherRegular();        userMatcherResultRegular();    }    /**     * String類中的三個基本操作使用正則:  匹配:matches() 切割: split() 替換: replaceAll()     */    public static void userStringRegular() {        String str1 = "1 2 3          4 54       5 6";        String[] numbers = str1.split(" +");        for (String temp : numbers) {            System.out.println(temp);        }        // 替換,替換所有的數字為* abd***:adad*****:asdadasadsfgi#%^^****        String str2 = "abd123:adad46587:asdadasadsfgi#%^^9090";        System.out.println(str2.replaceAll("[0-9]", "*"));        System.out.println(str2.replaceAll("\\d", "*"));        // 匹配匹配郵箱        String mail1 = "[email protected]";        String mail2 = "[email protected]";        String mail3 = "[email protected]";        // String mainRegex =        // "[0-9a-zA-Z_][email protected][0-9a-zA-Z_]++(\\.[0-9a-zA-Z_]+{2,4})+";        String mainRegex = "\\[email protected]\\w+(\\.\\w{2,4})+";        System.out.println(mail1.matches(mainRegex));// true        System.out.println(mail2.matches(mainRegex));// true        System.out.println(mail3.matches(mainRegex));// false    }    /**    * java中正則匹配的對象:    * pattern:    *       Pattern   Pattern.complie(regexString)    *       Macther   Pattern.matches(regexString)    * Matcher:    *       boolean    matcher.find() //尋找下一個匹配對象    *       String    matcher.guorp() //返回整個匹配模式比對到的結果    *       boolean    matcher.matches() //嘗試將整個地區與模式比對    *    int         matcher.groupCount() //返回匹配規則的分組,如:(aa)(bb):這表示兩組    *       String        matcher.group(int group)    //返回匹配對象對應分組的匹配結果    *       MatcheResult  matcher.toMatchResult()    //將匹配結果一MatchResult的形式返回    */    public static void userMatcherRegular() {        // 匹配出3個字元的字串        String str = "abc 124 ewqeq qeqe   qeqe   qeqe  aaaa  fs fsdfs d    sf sf sf  sf sfada dss dee ad a f s f sa a‘lfsd;‘l";        Pattern pt = Pattern.compile("\\b\\w{3}\\b");        Matcher match = pt.matcher(str);        while (match.find()) {            System.out.println(match.group());        }        // 匹配出郵箱地址        String str2 = "dadaadad   da da   dasK[PWEOO-123- [email protected] [email protected] =0KFPOS9IR23J0IS [email protected]@ADA.COM.CN [email protected] UFSFJSFI-SI- ";        Pattern pet2 = Pattern.compile("\\b\\[email protected]\\w+(\\.\\w{2,4})+\\b");        Matcher match2 = pet2.matcher(str2);        while (match2.find()) {            System.out.println(match2.group());        }        // 匹配        String sr = "dada ada adad adsda ad asdda adr3 fas daf fas fdsf 234 adda";        // 包含兩個匹配組,一個是三個字元,一個是匹配四個字元        Pattern pet = Pattern.compile("\\b(\\w{3}) *(\\w{4})\\b");        Matcher match1 = pet.matcher(sr);        int countAll = match1.groupCount();// 2        while (match1.find()) {            System.out.print("匹配組結果:");            for (int i = 0; i < countAll; i++) {                System.out.print(String.format("\n\t第%s組的結果是:%s", i + 1,                        match1.group(i + 1)));            }            System.out.print("\n匹配的整個結果:");            System.out.println(match1.group());        }        /*         * 匹配組結果:         *  第1組的結果是:ada          *  第2組的結果是:adad 匹配的整個結果:ada adad 匹配組結果:         *  第1組的結果是:fas         *  第2組的結果是:fdsf 匹配的整個結果:fas fdsf 匹配組結果: 第1組的結果是:234 第2組的結果是:adda         * 匹配的整個結果:234 adda         */    }    public static void userMatcherResultRegular() {        String sr = "dada ada adad adsda ad asdda adr3 fas daf fas fdsf 234 adda";        Pattern pet = Pattern.compile("\\b(\\w{3}) *(\\w{4})\\b");        Matcher match = pet.matcher(sr);        MatchResult ms = null;        while (match.find()) {            ms = match.toMatchResult();            System.out.print("匹配對象的組結果:");            for (int i = 0; i < ms.groupCount(); i++) {                System.out.print(String.format("\n\t第%s組的結果是:%s", i + 1,                        ms.group(i + 1)));            }            System.out.println(ms.group());        }    }/*匹配對象的組結果:    第1組的結果是:ada    第2組的結果是:adad匹配的整個結果:ada adad匹配對象的組結果:    第1組的結果是:fas    第2組的結果是:fdsf匹配的整個結果:fas fdsf匹配對象的組結果:    第1組的結果是:234    第2組的結果是:adda匹配的整個結果:234 adda */}

  -- 爬取網頁的url

package com.zwj.string;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.Arrays;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;public class StringDemo {    public static void main(String[] args) {               String str=getURL("https://www.163.com/", "gbk");        //String regex = "^([hH][tT]{2}[pP]:/*|[hH][tT]{2}[pP][sS]:/*|[fF][tT][pP]:/*)(([A-Za-z0-9-~]+).)+([A-Za-z0-9-~\\/])+(\\?{0,1}(([A-Za-z0-9-~]+\\={0,1})([A-Za-z0-9-~]*)\\&{0,1})*)$";        String regex="href=\"([\\w\\s./:]+?)\"";                List<String> list=getMatchersubStrings(regex, str);        for (String string : list) {        System.out.println(string);        }            }            // 爬取網頁的URL 返回到list集合裡面    public static List<String>   getMatchersubStrings( String regex,String  str){        List<String>  list=new ArrayList<String>();        Pattern patter = Pattern.compile(regex);        Matcher matcher=patter.matcher(str);        int countAll=matcher.groupCount();              while (matcher.find()) {                /*System.out.print("匹配組結果:");                for (int i = 0; i < countAll; i++) {                    System.out.print(String.format("\n\t第%s組的結果是:%s", i + 1,                            matcher.group(i + 1)));                }                System.out.print("\n匹配的整個結果:");*/                list.add(matcher.group(1));         }        return  list;    }         // 爬取163 網頁的html 代碼    public static String getURL(String urlstring, String charcode) {        StringBuilder sb = new StringBuilder();        URL url = null;        try {            url = new URL(urlstring);            BufferedReader bd = new BufferedReader(new InputStreamReader(                    url.openStream(), Charset.forName(charcode)));            String str = null;            while ((str = bd.readLine()) != null) {                sb.append(str);            }        } catch (MalformedURLException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        return sb.toString();    }}

 

java基礎-Regex

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.