北大青鳥(niǎo)北京校區(qū)提供:Java正則表達(dá)式

      北大青鳥(niǎo)北京通州校區(qū)學(xué)術(shù)部提供:

      一、java正則表達(dá)式概述:正則表達(dá)式是Java處理字符串、文本的重要工具。

      Java對(duì)正則表達(dá)式的處理集中在以下兩個(gè)兩個(gè)類(lèi):
      java.util.regex.Matcher 模式類(lèi):用來(lái)表示一個(gè)編譯過(guò)的正則表達(dá)式。
      java.util.regex.Pattern 匹配類(lèi):用模式匹配一個(gè)字符串所表達(dá)的抽象結(jié)果。
      北大青鳥(niǎo)課程

      比如一個(gè)簡(jiǎn)單例子:
      1. import java.util.regex.Matcher;  
      2. import java.util.regex.Pattern;  
      3. /** * 正則表達(dá)式例子 * * @author leizhimin 2009-7-17 9:02:53 */  
      4. public class TestRegx {  
      5. public static void main(String[] args) {  
      6. Pattern p = Pattern.compile("f(.+?)k");  
      7. Matcher m = p.matcher("fckfkkfkf");  
      8. while (m.find()) { String s0 = m.group();  
      9. String s1 = m.group(1);  
      10. System.out.println(s0 + "||" + s1);  
      11. }  
      12. System.out.println("---------");  
      13. m.reset("fucking!");  
      14. while (m.find())  
      15. {  
      16. System.out.println(m.group());  
      17. }  
      18. Pattern p1 = Pattern.compile("f(.+?)i(.+?)h");  
      19. Matcher m1 = p1.matcher("finishabigfishfrish"); 
      20. while (m1.find()) {  
      21. String s0 = m1.group();  
      22. String s1 = m1.group(1);  
      23. String s2 = m1.group(2);  
      24. System.out.println(s0 + "||" + s1 + "||" + s2);  
      25. }  
      26. System.out.println("---------");  
      27. Pattern p3 = Pattern.compile("(19|20)\\d\\d([- /.])(0[1-9]|1[012])\\2(0[1-9]|[12][0-9]|3[01])");  
      28. Matcher m3 = p3.matcher("1900-01-01 2007/08/13 1900.01.01 1900 01 01
      29. 1900-01.01 1900 13 01 1900 02 31");  
      30. while (m3.find()) { System.out.println(m3.group()); 
      31.  } } }
      輸出結(jié)果:(北大青鳥(niǎo)北京校區(qū),北大青鳥(niǎo)課程
      1. fck||c fkk||k ---------  
      2. fuck finish||in||s fishfrish||ishfr||s ---------  
      3. 1900-01-01 2007/08/13 1900.01.01 1900 01 01 1900 02 31 Process finished with exit code 0

      二、一些容易迷糊的問(wèn)題

      1、Java對(duì)反斜線(xiàn)處理的問(wèn)題
      在其他語(yǔ)言中,\\表示要插入一個(gè)字符\;
      在Java語(yǔ)言中,\\表示要插入正則表達(dá)式的反斜線(xiàn),并且后面的字符有特殊意義。(北大青鳥(niǎo)北京校區(qū),北大青鳥(niǎo)課程)

      看API文檔:
      預(yù)定義字符類(lèi)
      • . 任何字符(與行結(jié)束符可能匹配也可能不匹配)
      • \d 數(shù)字:[0-9]
      • \D 非數(shù)字: [^0-9]
      • \s 空白字符:[ \t\n\x0B\f\r]
      • \S 非空白字符:[^\s]
      • \w 單詞字符:[a-zA-Z_0-9]
      • \W 非單詞字符:[^\w]
      但是看看上面程序,對(duì)比下不難看出:
      \d在實(shí)際使用的時(shí)候就寫(xiě)成了 \\d;

      在Java正則表達(dá)式中,如果要插入一個(gè)\字符,則需要在正則表達(dá)式中寫(xiě)成\\\\,原因是下面的APIDoc定義\\表示一個(gè)反斜線(xiàn)。(北大青鳥(niǎo)北京校區(qū),北大青鳥(niǎo)課程

      但是如果在正則表示式中表示回車(chē)換行等,則不需要多添加反斜線(xiàn)了。比如回車(chē)\r就寫(xiě)作\r.

      字符
      • x 字符 x
      • \\ 反斜線(xiàn)字符
      • \0n 帶有八進(jìn)制值 0 的字符 n (0 <= n <= 7)
      • \0nn 帶有八進(jìn)制值 0 的字符 nn (0 <= n <= 7)
      • \0mnn 帶有八進(jìn)制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7)
      • \xhh 帶有十六進(jìn)制值 0x 的字符 hh
      • \uhhhh 帶有十六進(jìn)制值 0x 的字符 hhhh
      • \t 制表符 ('\u0009')
      • \n 新行(換行)符 ('\u000A')
      • \r 回車(chē)符 ('\u000D')
      • \f 換頁(yè)符 ('\u000C')
      • \a 報(bào)警 (bell) 符 ('\u0007')
      • \e 轉(zhuǎn)義符 ('\u001B')
      • \cx 對(duì)應(yīng)于 x 的控制符

      2、Matcher.find():嘗試查找與模式匹配的字符序列的下一個(gè)子序列。此方法從字符序列的開(kāi)頭開(kāi)始,如果該方法的前一次調(diào)用成功了并且從那時(shí)開(kāi)始匹配器沒(méi)有被重置,則從以前匹配操作沒(méi)有匹配的第一個(gè)字符開(kāi)始,即如果前一次找到與模式匹配的子序列則這次從這個(gè)子序列后開(kāi)始查找。(北大青鳥(niǎo)北京校區(qū),北大青鳥(niǎo)課程

      3、Matcher.matchers():判斷整個(gè)字符序列與模式是否匹配。當(dāng)連續(xù)用Matcher對(duì)象檢查多個(gè)字符串時(shí)候,可以使用
      Matcher.reset():重置匹配器,放棄其所有顯式狀態(tài)信息并將其添加位置設(shè)置為零。

      或者M(jìn)atcher.reset(CharSequence input) 重置此具有新輸入序列的匹配器。
      來(lái)重復(fù)使用匹配器。

      4、組的概念,這個(gè)概念很重要,組是用括號(hào)劃分的正則表達(dá)式,可以通過(guò)編號(hào)來(lái)引用組。組號(hào)從0開(kāi)始,有幾對(duì)小括號(hào)就表示有幾個(gè)組,并且組可以嵌套,組號(hào)為0的表示整個(gè)表達(dá)式,組號(hào)為1的表示第一個(gè)組,依此類(lèi)推。(北大青鳥(niǎo)北京校區(qū),北大青鳥(niǎo)課程)

      例如:A(B)C(D)E正則式中有三組,組0是ABCDE,組1是B,組2是D;
      A((B)C)(D)E正則式中有四組:組0是ABCDE,組1是BC,組2是B;組3是C,組4是D。
      • int groupCount():返回匹配其模式中組的數(shù)目,不包括第0組。
      • String group():返回前一次匹配操作(如find())的第0組。
      • String group(int group):返回前一次匹配操作期間指定的組所匹配的子序列。如果該匹配成功,但指定組未能匹配字符序列的任何部分,則返回 null。
      • int start(int group):返回前一次匹配操作期間指定的組所匹配的子序列的初始索引。
      • int end(int group):返回前一次匹配操作期間指定的組所匹配的子序列的最后索引+1。
      5、匹配的范圍的控制
      最變態(tài)的就要算lookingAt()方法了,名字很讓人迷惑,需要認(rèn)真看APIDoc。
      • start() 返回以前匹配的初始索引。
      • end() 返回最后匹配字符之后的偏移量。
      • public boolean lookingAt()嘗試將從區(qū)域開(kāi)頭開(kāi)始的輸入序列與該模式匹配。
      與 matches 方法類(lèi)似,此方法始終從區(qū)域的開(kāi)頭開(kāi)始;與之不同的是,它不需要匹配整個(gè)區(qū)域。如果匹配成功,則可以通過(guò) start、end 和 group 方法獲取更多信息。
      返回:當(dāng)且僅當(dāng)輸入序列的前綴匹配此匹配器的模式時(shí)才返回 true。

      6、Pattern標(biāo)記
      Pattern類(lèi)的靜態(tài)方法
      1. static Pattern compile(String regex, int flags) 
      將給定的正則表達(dá)式編譯到具有給定標(biāo)志的模式中。
      其中的flags參數(shù)就是Pattern標(biāo)記,這個(gè)標(biāo)記在某些時(shí)候非常重要。
      • Pattern.CANON_EQ 啟用規(guī)范等價(jià)。
      • Pattern.CASE_INSENSITIVE 啟用不區(qū)分大小寫(xiě)的匹配。
      • Pattern.COMMENTS 模式中允許空白和注釋。
      • Pattern.DOTALL 啟用 dotall 模式。
      • Pattern.LITERAL 啟用模式的字面值分析。
      • Pattern.MULTILINE 啟用多行模式。
      • Pattern.UNICODE_CASE 啟用 Unicode 感知的大小寫(xiě)折疊。
      • Pattern.UNIX_LINES 啟用 Unix 行模式。
      北大青鳥(niǎo)北京校區(qū),北大青鳥(niǎo)課程—未完待續(xù))

      北大青鳥(niǎo)網(wǎng)上報(bào)名
      北大青鳥(niǎo)招生簡(jiǎn)章
      主站蜘蛛池模板: 91视频国产一区| 久久久久久人妻一区二区三区| 无码日韩精品一区二区三区免费| 中文字幕无线码一区2020青青 | 激情亚洲一区国产精品| 狠狠做深爱婷婷综合一区| 亚洲AV无码一区二区三区性色 | 国产成人综合一区精品| 日韩免费无码视频一区二区三区| 99久久精品国产免看国产一区| 日本精品一区二区三区在线视频| 国产成人精品一区二三区熟女| 色噜噜狠狠一区二区三区| 久久久无码精品国产一区| 国产精品视频一区二区三区四| 亚洲欧洲∨国产一区二区三区| 国产91一区二区在线播放不卡| 日本免费精品一区二区三区| 高清一区二区三区视频| 国产无吗一区二区三区在线欢 | 日韩内射美女人妻一区二区三区| 久久精品道一区二区三区| 国产成人无码一区二区在线播放| 自慰无码一区二区三区| 亚洲一区AV无码少妇电影☆| 久久99久久无码毛片一区二区 | 蜜桃视频一区二区| 亚洲国产成人久久一区久久| 国产高清在线精品一区二区三区| 成人免费视频一区二区| 国产一区二区三区高清视频| 国精产品一区一区三区免费视频| 国产精品无码一区二区三级| 无码日韩精品一区二区免费暖暖| 久久久国产精品亚洲一区| 欧美一区内射最近更新| 国产一区二区影院| 国产在线一区二区在线视频| 91福利视频一区| 国产suv精品一区二区6| 99久久精品国产免看国产一区|