成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java正則表達(dá)式應(yīng)用總結(jié)

開發(fā) 后端
本文介紹的是java正則表達(dá)式應(yīng)用總結(jié),希望對你有幫助,一起來看。

一、java正則表達(dá)式概述

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

Java對正則表達(dá)式的處理集中在以下兩個兩個類:

java.util.regex.Matcher 模式類:用來表示一個編譯過的正則表達(dá)式。

java.util.regex.Pattern 匹配類:用模式匹配一個字符串所表達(dá)的抽象結(jié)果。
(很遺憾,Java Doc并沒有給出這兩個類的職責(zé)概念。)

比如一個簡單例子:

  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é)果:

  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 

二、一些容易迷糊的問題

1、Java對反斜線處理的問題

在其他語言中,\\表示要插入一個字符\;

在Java語言中,\\表示要插入正則表達(dá)式的反斜線,并且后面的字符有特殊意義。

看API文檔:

預(yù)定義字符類

  • . 任何字符(與行結(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]

但是看看上面程序,對比下不難看出:

\d在實(shí)際使用的時候就寫成了 \\d;

在Java正則表達(dá)式中,如果要插入一個\字符,則需要在正則表達(dá)式中寫成\\\\,原因是下面的APIDoc定義\\表示一個反斜線。
但是如果在正則表示式中表示回車換行等,則不需要多添加反斜線了。比如回車\r就寫作\r.

字符

  • x 字符 x
  • \\ 反斜線字符
  • \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 回車符 ('\u000D')
  • \f 換頁符 ('\u000C')
  • \a 報(bào)警 (bell) 符 ('\u0007')
  • \e 轉(zhuǎn)義符 ('\u001B')
  • \cx 對應(yīng)于 x 的控制符

2、Matcher.find():嘗試查找與模式匹配的字符序列的下一個子序列。此方法從字符序列的開頭開始,如果該方法的前一次調(diào)用成功了并且從那時開始匹配器沒有被重置,則從以前匹配操作沒有匹配的***個字符開始,即如果前一次找到與模式匹配的子序列則這次從這個子序列后開始查找。

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

或者M(jìn)atcher.reset(CharSequence input) 重置此具有新輸入序列的匹配器。

來重復(fù)使用匹配器。

4、組的概念,這個概念很重要,組是用括號劃分的正則表達(dá)式,可以通過編號來引用組。組號從0開始,有幾對小括號就表示有幾個組,并且組可以嵌套,組號為0的表示整個表達(dá)式,組號為1的表示***個組,依此類推。

例如: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ū)域開頭開始的輸入序列與該模式匹配。

與 matches 方法類似,此方法始終從區(qū)域的開頭開始;與之不同的是,它不需要匹配整個區(qū)域。如果匹配成功,則可以通過 start、end 和 group 方法獲取更多信息。

返回:當(dāng)且僅當(dāng)輸入序列的前綴匹配此匹配器的模式時才返回 true。

6、Pattern標(biāo)記

Pattern類的靜態(tài)方法

  1. static Pattern compile(String regex, int flags)  

將給定的正則表達(dá)式編譯到具有給定標(biāo)志的模式中。

其中的flags參數(shù)就是Pattern標(biāo)記,這個標(biāo)記在某些時候非常重要。

  • Pattern.CANON_EQ 啟用規(guī)范等價。
  • Pattern.CASE_INSENSITIVE 啟用不區(qū)分大小寫的匹配。
  • Pattern.COMMENTS 模式中允許空白和注釋。
  • Pattern.DOTALL 啟用 dotall 模式。
  • Pattern.LITERAL 啟用模式的字面值分析。
  • Pattern.MULTILINE 啟用多行模式。
  • Pattern.UNICODE_CASE 啟用 Unicode 感知的大小寫折疊。
  • Pattern.UNIX_LINES 啟用 Unix 行模式。

三、字符串的替換

String.replace(char oldChar, char newChar)

返回一個新的字符串,它是通過用 newChar 替換此字符串中出現(xiàn)的所有 oldChar 而生成的。

String.replace(CharSequence target, CharSequence replacement)

使用指定的字面值替換序列替換此字符串匹配字面值目標(biāo)序列的每個子字符串。

String.replaceAll(String regex, String replacement)

使用給定的 replacement 字符串替換此字符串匹配給定的正則表達(dá)式的每個子字符串。

String.replaceFirst(String regex, String replacement)

使用給定的 replacement 字符串替換此字符串匹配給定的正則表達(dá)式的***個子字符串。

StringBuffer.replace(int start, int end, String str)

使用給定 String 中的字符替換此序列的子字符串中的字符。

StringBuilder.replace(int, int, java.lang.String)

使用給定 String 中的字符替換此序列的子字符串中的字符。

Matcher.replaceAll(String replacement)

替換模式與給定替換字符串相匹配的輸入序列的每個子序列。

Matcher.replaceFirst(String replacement)

替換模式與給定替換字符串匹配的輸入序列的***個子序列。

四、字符串的切分

String[] split(String regex)

根據(jù)給定的正則表達(dá)式的匹配來拆分此字符串。

String[] split(String regex, int limit)

根據(jù)匹配給定的正則表達(dá)式來拆分此字符串。

當(dāng)然,還有一個StringTokenizer類,可以用來切分字符串,但是現(xiàn)在SUN已經(jīng)不推薦使用了。轉(zhuǎn)變下思路,其實(shí)用正則表達(dá)式也可以達(dá)到將字符串切分為段的目的。

五、沒有提到的

正則表達(dá)式的API簡單好用,沒太多復(fù)雜的地方,并非不重要,正則表達(dá)式***的難點(diǎn)在于熟練書寫正則表達(dá)式。有關(guān)正則表達(dá)式的規(guī)范,在Pattern類APIdoc中都有非常詳細(xì)的介紹,而且條理清晰,在此就不贅述了。

責(zé)任編輯:于鐵 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2024-09-14 09:18:14

Python正則表達(dá)式

2009-02-18 09:48:20

正則表達(dá)式Java教程

2016-11-10 16:21:22

Java 正則表達(dá)式

2009-09-08 09:32:13

正則表達(dá)式學(xué)習(xí)

2020-09-04 09:16:04

Python正則表達(dá)式虛擬機(jī)

2018-09-27 15:25:08

正則表達(dá)式前端

2009-08-27 15:45:30

C#正則表達(dá)式

2023-10-07 08:25:09

Java處理工具正則表達(dá)式

2009-06-08 16:49:05

Java正則表達(dá)式group

2022-03-28 06:19:14

正則表達(dá)式開發(fā)

2019-07-17 15:45:47

正則表達(dá)式字符串前端

2021-01-27 11:34:19

Python正則表達(dá)式字符串

2009-09-16 18:19:34

正則表達(dá)式組

2011-06-02 12:34:16

正則表達(dá)式

2017-05-12 10:47:45

Linux正則表達(dá)式程序基礎(chǔ)

2009-09-16 17:15:57

正則表達(dá)式引擎

2022-01-04 11:35:03

Linux Shel正則表達(dá)式Linux

2023-09-13 08:12:45

2010-03-25 18:25:36

Python正則表達(dá)式

2011-11-23 11:04:41

BGPAS_PATH正則表達(dá)式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲精品视频二区 | 欧美成人精品激情在线观看 | 国产三级一区二区三区 | 国产精品一区二区在线 | 久久精品小视频 | 国产精品免费播放 | 午夜寂寞影院列表 | 7777在线视频免费播放 | 色婷婷综合久久久久中文一区二区 | 亚洲精品一区在线观看 | 国产一二区免费视频 | 日韩欧美精品 | 四虎影院新地址 | 中文字幕视频在线观看免费 | 国产丝袜一区二区三区免费视频 | 欧美精品福利视频 | 久久久久av | 欧美成人精品激情在线观看 | 日本又色又爽又黄的大片 | 日韩精品一区二区三区免费视频 | 天天拍天天插 | 特一级毛片 | 成人日b视频 | 久久亚洲国产精品 | 日韩精品人成在线播放 | 国产日韩欧美中文 | h视频在线免费 | 欧美激情国产精品 | 久久久久久国产精品 | 国产精品久久av | 91亚洲国产亚洲国产 | av在线一区二区三区 | 黑人精品 | 黄免费看 | 色噜噜亚洲男人的天堂 | 亚洲精品国产电影 | 欧美寡妇偷汉性猛交 | 精品日韩一区二区 | 国产一区二区三区久久久久久久久 | 亚洲国产成人精品女人久久久 | 欧美国产一区二区 |