亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java正則表達(dá)式API詳解

瀏覽:3日期:2022-09-05 15:35:46

Java中正則表達(dá)式相關(guān)的類都在java.util.regex之內(nèi),一般來(lái)說(shuō),主要用到的是這兩個(gè)類:java.util.regex.Pattern和java.util.regex.Matcher。Pattern對(duì)應(yīng)正則表達(dá)式,一個(gè)Pattern與一個(gè)String對(duì)象關(guān)聯(lián),生成一個(gè)Matcher,它對(duì)應(yīng)Pattern在String中的一次匹配; 調(diào)用Matcher對(duì)象的find()方法,Matcher對(duì)象就會(huì)更新為下一次匹配的匹配信息。示例:

Pattern pattern = Pattern.compile('d{4}-d{2}-]]d{2}');String string = '2010-12-20 2011-02-14';Matcher matcher = pattern.matcher(string);while(matcher.find()) { System.out.println(matcher.group(0));}

Pattern

Pattern是Java語(yǔ)言中的正則表達(dá)式對(duì)象。要使用正則表達(dá)式,首先必須從字符串“編譯”出Pattern對(duì)象,這需要用到Pattern.compile(String regex)方法。

Pattern pattern = Pattern.compile('a.b+');

如果要指定匹配模式,可以在表達(dá)式中使用(?modifier)修飾符指定,也可以使用預(yù)定義常量。下面的兩個(gè)Pattern對(duì)象的生成方法不同,結(jié)果卻是等價(jià)的。

Pattern pattern = Pattern.compile('(?i)a.b+');Pattern pattern = Pattern.compile('a.b+',Pattern.CASE_INSENSITIVE);

如果要同時(shí)指定多種模式,可以連寫模式修飾符,也可以直接用|運(yùn)算符將預(yù)定義常量連接起來(lái),以下兩個(gè)Pattern對(duì)象也是等價(jià)的。

Pattern pattern = Pattern.compile('(?is)a.b+');Pattern pattern = Pattern.compile('a.b+',Pattern.CASE_INSENSITIVE | Pattern.DOTALL);

下面介紹Pattern的主要成員方法:

1. static boolean matches(String regex.CharSequence input)

這個(gè)方法可以檢驗(yàn)字符串input能否由正則表達(dá)式regex匹配,因?yàn)槭庆o態(tài)方法,所以不需要編譯生成各個(gè)對(duì)象,方便隨手使用。要注意的是,它檢驗(yàn)的是“整個(gè)字符串能否由表達(dá)式匹配”,而不是“表達(dá)式能否在字符串中找到匹配”。你可以認(rèn)為regex的首尾自動(dòng)加上了匹配字符串起始和結(jié)束位置的錨點(diǎn) A和z 。

Pattern.matches('d{6}','a123456'); //falsePattern.matches('d{6}','123456'); //true

2. String[] split(CharSequence text)

通常,Pattern對(duì)象需要配合下面將要介紹的Matcher一起完成正則操作。如果只用正則表達(dá)式來(lái)切分字符串,只用Pattern的這個(gè)方法也可以。

這個(gè)方法接收的參數(shù)類型是CharSequence它可能有點(diǎn)陌生,其實(shí)它是String的父類,其他子類還有CharBuffer,StringBuffer,StringBuilder,因而可以應(yīng)對(duì)常見(jiàn)的各種表示“字符串”的類。下面的代碼僅以String為例:

String s = '2010-12-20';Pattern pattern = Pattern.compile('s+');for(String part : pattern.split(s)){ System.out.println(part);}

3. String[] split(CharSequence text,int limit)

這個(gè)方法與上面的方法很相似,只是多了一個(gè)參數(shù)limit,它用來(lái)限定返回的String數(shù)組的最大長(zhǎng)度。也就是說(shuō),它規(guī)定了字符串至多只能“切”limit-1次。如果不需要對(duì)字符串比較大,進(jìn)行盡可能多的切分,使用這個(gè)方法。

String s = ' 2010-12-20 ';Pattern pattern = Pattern.compile('s+');for(String part : Pattern.split(s,2)){ System.out.println(part);}

既然limit是一個(gè)int類型,那么它自然可以設(shè)定為各種值,下表總結(jié)了limit在各個(gè)取值區(qū)間對(duì)結(jié)果的影響(未指定limit時(shí),最終返回包含n個(gè)元素的數(shù)組,實(shí)際能切分的次數(shù)是 n-1 ):

取值 結(jié)果limit < 0等于未設(shè)定limit時(shí),保留末尾的空字符串limit = 0 等于未設(shè)定limit時(shí),切分n-1次,忽略末尾的空字符串0 < limit < n返回?cái)?shù)組包含limit個(gè)元素,切分limit-1次,最后一個(gè)元素是第limit-1次切分后,右側(cè)剩下的所有文本limit >= n等于未指定limit時(shí)

4. static String quote(String text)

這個(gè)方法用來(lái)取消字符串text中所有轉(zhuǎn)義字符的特殊含義,實(shí)質(zhì)就是在字符串首尾添加 Q 和 E。通常,如果需要把某個(gè)字符串作為沒(méi)有任何特殊意義的正則表達(dá)式(比如從外界讀入的字符串,用在某個(gè)復(fù)雜的正則表達(dá)式中),就可以使用這個(gè)方法:

'aacb'.matches('a*.b'); //true'a*.b'.matches('a*.b'); //false'a*.b'.matches('a*.b'); //false'a*.b'.matches(Pattern.quote('a*.b'));//true

Matcher

Matcher可以理解為“某次具體匹配的結(jié)果對(duì)象”:把編譯好的Pattern對(duì)象“應(yīng)用”到某個(gè)String對(duì)象上,就獲得了作為“本次匹配結(jié)果”的Matcher對(duì)象。之后,就可以通過(guò)它獲得關(guān)于匹配的信息。

Pattern pattern = Pattern.compile('d{4}-d{2}-d{2}');Matcher matcher = pattern.matcher('2010-12-20 2011-02-14');while(matcher.find()){ System.out.println(matcher.group());}

對(duì)編譯好的Pattern對(duì)象調(diào)用matcher(String text)方法,傳入要匹配的字符串text,就得到了Matcher對(duì)象,每次調(diào)用一次find()方法,如果返回true,就表示“找到一個(gè)匹配”,此時(shí)可以通過(guò)下面的若干方法獲得關(guān)于本次匹配的信息。

1. String group(int n)

返回當(dāng)前匹配中第n對(duì)捕獲括號(hào)捕獲的文本,如果n為0,則取匹配的全部?jī)?nèi)容;如果n小于0或者大于最大分組編號(hào)數(shù),則報(bào)錯(cuò)。

2. String group()

返回當(dāng)前匹配的全部文本,相當(dāng)于group(0)。

3. int groupCount()

返回此Matcher對(duì)應(yīng)Pattern對(duì)象中包含的捕獲分組數(shù)目,編號(hào)為0的默認(rèn)分組不計(jì)在內(nèi)。

4. int start(n)

返回當(dāng)前匹配中第n對(duì)捕獲括號(hào)匹配的文本在原字符串中的起始位置。

5. int start()

返回當(dāng)前匹配的文本在原字符串中的起始位置,相當(dāng)于start(0)。

6. int end(n)

返回當(dāng)前匹配中第n對(duì)捕獲括號(hào)匹配的文本在原字符串中的結(jié)束位置。

7. int end()

返回當(dāng)前匹配的文本在原字符串中的結(jié)果位置,相當(dāng)于end(0)。

8. String replaceAll(String replacement)

如果進(jìn)行正則表達(dá)式替換,一般用到的是Matcher的replaceAll()方法,它會(huì)將原有文本中正則表達(dá)式能匹配的所有文本替換為replaceement字符串。

String

許多時(shí)候只需要臨時(shí)使用某個(gè)正則表達(dá)式,而不需要重復(fù)使用,這時(shí)候每次都生成Pattern對(duì)象和Matcher對(duì)象再操作顯得很煩瑣。所以,Java的String類提供了正則表達(dá)式操作的靜態(tài)成員方法,只需要String對(duì)象就可以執(zhí)行正則表達(dá)式操作。

1. boolean matches(String regex)

這個(gè)方法判斷當(dāng)前的string對(duì)象能否由正則表達(dá)式regex匹配。請(qǐng)注意,這里的“匹配”指的并不是regex能否在String內(nèi)找到匹配,而是指regex匹配整個(gè)String對(duì)象,因此非常適合用來(lái)做數(shù)據(jù)校驗(yàn)。

'123456'.matches('d{6}'); //true'a123456'.matches('d{6}'); //true

2. String replaceFirst(String regex,String replacement)

這個(gè)方法用來(lái)替換正則表達(dá)式regex在字符串中第一次能匹配的文本,可以在replacement字符串中用$num引用regex中對(duì)應(yīng)捕獲分組匹配的文本。

'2010-12-20 2011-02-14'.replaceFirst('(d{4})-(d{2})-(d{2})','$2/$3/$1');

3. String replaceAll(String regex,String replacement)

這個(gè)方法用來(lái)進(jìn)行所有的替換,它的結(jié)果等同于Matcher類的replaceAll()方法,replacement字符串中也可以用$num的表示法引用regex中對(duì)應(yīng)捕獲分組匹配的文本。

'2010-12-20 2011-02-14'.replaceAll('(d{4})-(d{2})-(d{2})','$2/$3/$1');

4. String[] split(String regex)

這個(gè)方法等價(jià)于Pattern中對(duì)應(yīng)的split()方法,此處不再贅述。

5. String[] split(String regex,int limit)

這個(gè)方法等價(jià)于Pattern中對(duì)應(yīng)的split()方法,此處不再贅述。來(lái)自:http://my.oschina.net/fhd/blog/370833

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 久久精品亚洲一区二区 | 欧美日韩国产手机在线观看视频 | 国产小视频网站 | 香蕉久久夜色精品国产尤物 | 麻豆视传媒短视频网站链接 | 国产一区二区三区在线观看精品 | 真人毛片免费观看视频 | 福利一区二区三区视频午夜观看 | 中文字幕国产在线观看 | 午夜a一级毛片一.成 | 亚洲精品国产网红在线 | 亚洲一区二区三区久久精品 | 国产最新网址 | 大尺度做爰床戏呻吟免费观看91 | 午夜国产精品理论片久久影院 | 国产精品拍自在线观看 | 妞干网在线免费视频 | 国内精品视频在线播放一区 | 国产美女一级特黄毛片 | 欧美一级成人影院免费的 | 91嫩草视频在线观看 | 国产91长腿美女在线观看 | 国产视频在线观看福利 | 国产精品成人麻豆专区 | 亚洲精品中文一区不卡 | 国产在线一区二区三区在线 | 日韩日韩日韩日韩日韩 | aaaaaa级特色特黄的毛片 | 久久er精品 | 在线黄色网 | 久久久久国产一级毛片高清版 | 老司机成人精品视频lsj | 免费一区二区三区四区五区 | 国产精品久久不卡日韩美女 | 69国产成人精品午夜福中文 | 一级日韩一级欧美 | 亚洲毛片在线看 | 欧美一级毛片大片免费播放 | 成人免费在线视频网站 | 亚洲国产剧情在线精品视 | 欧美影视一区二区三区 |