標籤: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