java正則表達(dá)式詳解

正則表達(dá)式用于指定字符串的模式,你可以任何需要定位使用匹配某種特定模式的字符串的情況下使用正則表達(dá)式

jdk1.4推出java.util.regex包,就為我們提供了很好的JAVA正則表達(dá)式應(yīng)用平臺(tái)。

先舉些入門的概念


// 反斜杠

/t 間隔 ('/u0009')

/n 換行 ('/u000A')

/r 回車 ('/u000D')

/d 數(shù)字 等價(jià)于[0-9]

/D 非數(shù)字 等價(jià)于[^0-9]

/s 空白符號(hào) [/t/n/x0B/f/r]

/S 非空白符號(hào) [^/t/n/x0B/f/r]

/w 單獨(dú)字符 [a-zA-Z_0-9]

/W 非單獨(dú)字符 [^a-zA-Z_0-9]

/f 換頁(yè)符

/e Escape

/b 一個(gè)單詞的邊界

/B 一個(gè)非單詞的邊界

/G 前一個(gè)匹配的結(jié)束

^為限制開(kāi)頭

^java ??? 條件限制為以Java為開(kāi)頭字符

$為限制結(jié)尾

java$ ??? 條件限制為以java為結(jié)尾字符

.? 條件限制除/n以外任意一個(gè)單獨(dú)字符

java.. ??? 條件限制為java后除換行外任意兩個(gè)字符

加入特定限制條件「[]」

[a-z] ??? 條件限制在小寫a to z范圍中一個(gè)字符

[A-Z] ??? 條件限制在大寫A to Z范圍中一個(gè)字符

[a-zA-Z] 條件限制在小寫a to z或大寫A to Z范圍中一個(gè)字符

[0-9] ??? 條件限制在小寫0 to 9范圍中一個(gè)字符

[0-9a-z] 條件限制在小寫0 to 9或a to z范圍中一個(gè)字符

[0-9[a-z]] 條件限制在小寫0 to 9或a to z范圍中一個(gè)字符(交集)

[]中加入^后加再次限制條件「[^]」

[^a-z] ??? 條件限制在非小寫a to z范圍中一個(gè)字符

[^A-Z] ??? 條件限制在非大寫A to Z范圍中一個(gè)字符

[^a-zA-Z] 條件限制在非小寫a to z或大寫A to Z范圍中一個(gè)字符

[^0-9] ??? 條件限制在非小寫0 to 9范圍中一個(gè)字符

[^0-9a-z] 條件限制在非小寫0 to 9或a to z范圍中一個(gè)字符

[^0-9[a-z]] 條件限制在非小寫0 to 9或a to z范圍中一個(gè)字符(交集)

在限制條件為特定字符出現(xiàn)0次以上時(shí),可以使用「*」

J* ??? 0個(gè)以上J

.* ??? 0個(gè)以上任意字符

J.*D ??? J與D之間0個(gè)以上任意字符

在限制條件為特定字符出現(xiàn)1次以上時(shí),可以使用「+」

J+ ??? 1個(gè)以上J

.+ ??? 1個(gè)以上任意字符

J.+D ??? J與D之間1個(gè)以上任意字符

在限制條件為特定字符出現(xiàn)有0或1次以上時(shí),可以使用「?」

JA? ??? J或者JA出現(xiàn)

限制為連續(xù)出現(xiàn)指定次數(shù)字符「{a}」

J{2} ??? JJ

J{3} ??? JJJ

文字a個(gè)以上,并且「{a,}」

J{3,} ??? JJJ,JJJJ,JJJJJ,???(3次以上J并存)

文字個(gè)以上,b個(gè)以下「{a,b}」

J{3,5} ??? JJJ或JJJJ或JJJJJ

兩者取一「|」

J|A ??? J或A

Java|Hello ??? Java或Hello


在regex包中,包括了兩個(gè)類,Pattern(模式類)和Matcher(匹配器類)。Pattern類是用來(lái)表達(dá)和陳述所要搜索模式的對(duì)象,Matcher類是真正影響搜索的對(duì)象。另加一個(gè)新的例外類,PatternSyntaxException,當(dāng)遇到不合法的搜索模式時(shí),會(huì)拋出例外。

比如,在字符串包含驗(yàn)證時(shí)

//查找以Java開(kāi)頭,任意結(jié)尾的字符串

Pattern pattern = Pattern.compile("^Java.*");

Matcher matcher = pattern.matcher("Java不是人");

boolean b= matcher.matches();

//當(dāng)條件滿足時(shí),將返回true,否則返回false

除了matchs()方法//matchs()方法得完全匹配上才會(huì)返回true

還有以下這些常用的方法

boolean find() //只要字符串中包含需要匹配的字符串模式,就返回true

int start() //返回找到字符串第一個(gè)字符的索引

int end() //返回找到字符串最后個(gè)字符的索引

int start(int groupIndex) //返回找到字符串第一個(gè)字符的索引,參數(shù)表明第幾個(gè)匹配到的字符串,如果只有一個(gè)不用參數(shù)

int end(int groupIndex) //返回找到字符串最后個(gè)字符的索引,參數(shù)表明第幾個(gè)匹配到的字符串,如果只有一個(gè)不用參數(shù)

String group(int groupIndex) //可能會(huì)匹配到多個(gè)字符串,參數(shù)groupIndex表示第幾個(gè)匹配到的字符串,然后返回該字符串

String replaceAll(String replacement) //用replacement替換所有匹配到的字符串

下面舉個(gè)例子說(shuō)明

查找網(wǎng)址url

代碼截圖

這是運(yùn)行結(jié)果

將所有匹配到的網(wǎng)址打印出來(lái)

運(yùn)行結(jié)果




最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問(wèn)題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,923評(píng)論 0 33
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,734評(píng)論 18 399
  • 我的夢(mèng)想就是做夢(mèng)都在想的事情! 每天都可以睡到自然醒。如果每天可以不工作,又有源源不斷的收入,那該有多好?。】梢哉?..
    斗圖表情包下載閱讀 2,242評(píng)論 0 1
  • 一、前言 這周回老家了,我的手機(jī)沒(méi)有信號(hào),不能上網(wǎng)。好多網(wǎng)友發(fā)來(lái)的消息沒(méi)看見(jiàn),特別是視頻,手機(jī)上不能觀看。并且文字...
    王顥閱讀 1,104評(píng)論 0 0
  • 不知道是不是巧合,看到這個(gè)專題的時(shí)間如果在推前一段時(shí)間可能我就沒(méi)有這么多的感觸,可能也不會(huì)覺(jué)得這個(gè)話題和我有關(guān)系想...
    芋圓西米丸子閱讀 370評(píng)論 5 7

友情鏈接更多精彩內(nèi)容