日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

黑马程序员-Java基础-正则表达式

發布時間:2024/6/14 java 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 黑马程序员-Java基础-正则表达式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

------- android培訓、java培訓、期待與您交流! ----------

  

一、概述:

  正則表達式:符合一定規則的表達式。

  作用:用于專門操作字符串。可以簡化對只付出的復雜操作。

  特點:用于一些特定的符號來表示一些代碼操作。簡化書寫。

  弊端:符號定義越多,正則越長,閱讀性越差。

  例如:對QQ號進行校驗,要求5~15位,0不能開頭,只能是數字。

  如果用String 類中的組合方法進行校驗:

1 // String類中的方法組合: 2 public static void checkQQ_1(String qq) { 3 int len = qq.length() ; 4 5 if (len > 15 || len < 5) { 6 System.out.println("長度錯誤。"); 7 } 8 else { 9 if (qq.startsWith("0")){ 10 System.out.println("不能以0開頭。"); 11 } 12 else { 13 14 try { 15 long q = Long.parseLong(qq) ; 16 System.out.println("qq:"+q); 17 } 18 catch(NumberFormatException e ) { 19 System.out.println("出現非法字符。"); 20 } 21 } 22 } 23 }

  但是如果使用正則表達式:

1 // 正則表達式: 2 public static void checkQQ(String qq) { 3 // 定義正則表達式規則:第一位是1-9中的一個,然后0-9中的數字出現4-14次。 4 String regex = "[1-9][0-9]{4,14}" ; 5 boolean flag = qq.matches(regex) ; 6 if (flag) 7 System.out.println(qq+":ok"); 8 else 9 System.out.println(qq+":不合法"); 10 }

  總結:使用正則表達式操作字符串。可以簡化對只付出的復雜操作。

二、常用正則表達式規則

  字符類?
  [abc] a、b 或 c(簡單類)?

  [^abc] 任何字符,除了 a、b 或 c(否定)?

  [a-zA-Z] a 到 z 或 A 到 Z,兩頭的字母包括在內(范圍)

  [a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)

  [a-z&&[def]] d、e 或 f(交集)

  [a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](減去)

  [a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](減去)?
?
  預定義字符類
  . 任何字符(與行結束符可能匹配也可能不匹配)

  \d 數字:[0-9]

  \D 非數字: [^0-9]
  \s 空白字符:[ \t\n\x0B\f\r]
  \S 非空白字符:[^\s]
  \w 單詞字符:[a-zA-Z_0-9]
  \W 非單詞字符:[^\w]?
?
  Greedy 數量詞
  X? X,一次或一次也沒有
  X* X,零次或多次
  X+ X,一次或多次
  X{n} X,恰好 n 次
  X{n,} X,至少 n 次
  X{n,m} X,至少 n 次,但是不超過 m 次?
?
  邊界匹配器
  ^ 行的開頭
  $ 行的結尾
  \b 單詞邊界
  \B 非單詞邊界
  \A 輸入的開頭
  \G 上一個匹配的結尾?
  \Z 輸入的結尾,僅用于最后的結束符(如果有的話)?

  \z 輸入的結尾

三、正則表達式具體操作

  1、匹配:?boolean matches(String regex)? 用規則匹配整個字符串,只要有一處不符合規則就返回false。

  總結:如果只想知道該字符串是對是錯,使用匹配。

  練習:匹配手機號碼:通常手機號碼是11位,而開頭一般是13、15、18。

1 public static void checkPhone(){ 2 String phone = "13821918343" ; 3 String regex = "1[358]\\d{9}" ; 4 System.out.println(phone.matches(regex)); 5 }

  regex 的規則是:第一個數字為1,第二個數字是3、5和8中的其中一個,后面由9個0~9中的數字組成。

  

  2、切割: String[] split(String regex) ; 按照切割規則將字符串切割成多個子串。

  總結:想要按照自定的方式將字符串變成多個字符串,切割。獲取規則以外的子串。

  

  3、替換:boolean replaceAll(String regex, String replacement)?使用給定的 replacement 替換此字符串所有匹配給定的正則表達式的子字符串。

  總結:想要將已有的字符串變成另一個字符串,則使用替換。

  練習:將下列字符串轉成:我要學編程。

  ?"我我我我...我要...要要要...學學..學編..編編編編編編編....編程.程...程程程..程"

  思路:先去掉".",然后將重疊字替換。

1 public static void test_1() { 2 String str = "我我我我...我要...要要要...學學..學編..編編編編編編編....編程.程...程程程..程" ; 3 // 將正則表達式封裝成對象: 4 String regex_1 = "\\.+" ; 5 String regex_2 = "(.)\\1+" ; 6 String str_r = str.replaceAll(regex_1, "") ; 7 System.out.println(str_r); 8 System.out.println(str_r.replaceAll(regex_2, "$1")); 9 }

  總結:“(.)” 表示將任意字符封裝成組,“\1”表示取第1組。“$1”,也是相當于取第一組的意思。

  

  4、獲取:將字符串中符合規則的子串取出?

  步驟:
??? ?  1、將正則表達式封裝成對象。Pattern p =?Pattern.complite(regex) ;
?????  2、讓正則對象和要操作的字符串相關聯,獲取正則匹配引擎。Matcher m = p.matcher(string) ;
?????  3、通過引擎對符合規則的子串進行操作。

四、練習

  練習:將IP地址進行地址段順序的排序。 192.223.1.234 102.49.23.13 10.10.10.10 1.1.1.1 8.109.90.30

  思路:按照字符串的順序排序。但是前提是要讓它們每一位都是3位。則是在前面補0。

  1、按照每一段需要的最多的0進行補齊,所以每一位至少有3位。

  2、然后將每一段只保留3位。

  3、切割出每一個IP地址,去掉0開頭。

1 public static void test_1() { 2 String str = "192.223.1.234 102.49.23.13 10.10.10.10 1.1.1.1 8.109.90.30" ; 3 // 補齊:最多補2個0; 4 str = str.replaceAll("(\\d+)", "00$1"); 5 System.out.println("補0后:"+str); 6 // 每一段只保留3位; 7 str = str.replaceAll("0*(\\d{3})", "$1") ; 8 System.out.println("去0后:"+str); 9 // 切割 10 String[] ips = str.split(" ") ; 11 // 排序 12 TreeSet<String> ipSet = new TreeSet<String>() ; 13 14 for(String ip : ips) { 15 ipSet.add(ip) ; 16 } 17 // 去掉開頭的0; 18 for(String ip : ipSet) { 19 System.out.println(ip.replaceAll("0*(\\d+)", "$1")); 20 } 21 }

  

  練習:網頁爬蟲:獲取網頁上的郵箱。

  即按照自己的規則,去獲取網頁上面的數據:網頁爬蟲。

  獲取郵箱則要定義郵箱的正則表達式:

  較為精確的匹配:\w+@[\w&&[^_]]+(\.[a-zA-z]+)+

  相對不太精確的匹配:\w+@\w+(\.\w+)+

1 import java.net.*; 2 import java.util.regex.*; 3 import java.io.*; 4 public class RegexTest2 { 5 public static void main(String[] args)throws Exception { 6 getEmail() ; 7 } 8 public static void getEmail() throws Exception { 9 URL url = new URL("http://tieba.baidu.com/p/2358578408") ; 10 URLConnection conn = url.openConnection() ; 11 BufferedReader bufr = 12 new BufferedReader(new InputStreamReader(conn.getInputStream())) ; 13 // 定義正則規則,將正則表達式封裝成對象。 14 String regex = "\\w+@[\\w&&[^_]]+(\\.[a-zA-z]+)+" ; 15 Pattern p = Pattern.compile(regex) ; 16 17 String line = null ; 18 while((line=bufr.readLine())!=null) { 19 Matcher m = p.matcher(line) ; 20 while(m.find()) { 21 System.out.println(m.group()); 22 } 23 } 24 } 25 }

  總結:Matcher 類中封裝了許多對匹配字符的操作。

  

轉載于:https://www.cnblogs.com/jbelial/archive/2013/05/30/3107646.html

總結

以上是生活随笔為你收集整理的黑马程序员-Java基础-正则表达式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。