目錄
一、正則表達(dá)式:
? ? ? ? 作用:
字符類(只匹配一個(gè)字符)
? ? ? ? ? ? ? ? 細(xì)節(jié)
預(yù)定義字符字符(只匹配一個(gè)字符)
? ? ? ? ? ? ? ? 細(xì)節(jié)
數(shù)量詞
二、爬蟲
? ? ? ? Pattern
? ? ? ? Matcher
? ? ? ? ? ? ? ? 要點(diǎn)說(shuō)明
一、正則表達(dá)式:
? ? ? ? 作用:
? ? ? ? ? ? ? ? 1、校驗(yàn)字符串是否滿足規(guī)則
? ? ? ? ? ? ? ? 2、在一段文本中查找滿足要求的內(nèi)容(爬蟲)
[abc] | 只能是a,b或c |
[^abc] | 除了這三個(gè)之外的任何字符 |
[a-zA-Z] | a-z,A-Z(字符串出現(xiàn)的字符只要在兩個(gè)范圍(包括z,Z)之內(nèi)就為true) |
[a-d[m-p]] | a-d或者m-p |
[a-z&&[def]] | a-z和def的交集 |
[a-z&&[^bc]] | a-z和非def的交集(即:[ad-z]) |
[a-z&&[^m-p]] | a-z和除了m-p的交集(即:[a-[q-z]]]) |
? ? ? ? ? ? ? ? 細(xì)節(jié):如果要求兩個(gè)范圍的交集,那么需要寫符號(hào)“&&”。如果寫成一個(gè)&那么此時(shí)“&”表示的就不是交集了,而是一個(gè)簡(jiǎn)簡(jiǎn)單單的“&”符號(hào)。
System.out.println("&".matches("[a-z&&[def]]"));//false
System.out.println("&".matches("[a-z&[def]]"));//true
?
. | 任何字符 |
\d | 一個(gè)數(shù)字[0-9] |
\D | 非數(shù)字:[^0-9] |
\s | 一個(gè)空白字符:[\t\n\x0B\f\r] |
\S | 非空白字符 |
\w | [a-za-Z_0-9]英文、數(shù)字、下劃線 |
\W | [^\w]一個(gè)非單詞字符 |
? ? ? ? ? ? ? ? 細(xì)節(jié):在Java中“\”為轉(zhuǎn)義字符,表示改變后面那個(gè)字符原本的含義。雙引號(hào)""在Java中表示字符串的開頭或結(jié)尾?!?strong>\"”表示把"變成普普通通的"(僅僅只是一個(gè)符號(hào),不具備任何含義)
“\\”表示把\變成普普通通的\
System.out.println("你a".matches("."));//false
System.out.println("你a".matches(".."));//true
System.out.println("你".matches("\\w"));//false
System.out.println("你".matches("\\W"));//true
X? | X出現(xiàn)一次或零次 |
X* | X出現(xiàn)零次或多次 |
X+ | X出現(xiàn)一次或多次 |
X{n} | X出現(xiàn)正好n次 |
X{n,} | X出現(xiàn)至少n次 |
X{n,m} | X出現(xiàn)至少n次但不超過(guò)m次 |
二、爬蟲
? ? ? ? Pattern:表示正則表達(dá)式
? ? ? ? Matcher:文本匹配器,作用按照正則表達(dá)式的規(guī)則去讀取字符串,從頭開始讀取。在大串中去找符合匹配規(guī)則的子串
? ? ? ? ? ? ? ? eg.有如下文本:Java自從95年問(wèn)世,經(jīng)歷了很多版本,目前企業(yè)中用到的最多的是Java8和Java11,因?yàn)檫@兩個(gè)是長(zhǎng)期支持版本,下一個(gè)長(zhǎng)期支持版本是Java17,相信在不久Java17也會(huì)逐漸登上歷史舞臺(tái)。
? ? ? ? ? ? ? ? 要求:找出里面所偶的JavaXX。
代碼如下:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class 爬蟲demo {
public static void main(String[] args) {
String str = "Java自從95年問(wèn)世,經(jīng)歷了很多版本,目前企業(yè)中用到的最多的是Java8和Java11,因?yàn)檫@兩個(gè)是長(zhǎng)期支持版本,下一個(gè)長(zhǎng)期支持版本是Java17,相信在不久Java17也會(huì)逐漸登上歷史舞臺(tái)";
//獲取正則表達(dá)式的對(duì)象
Pattern p = Pattern.compile("Java\\d{0,2}");
//獲取文本匹配器的對(duì)象
Matcher m = p.matcher(str);
//利用循環(huán)從頭獲取,尋找是否有滿足規(guī)則的子串。
while(m.find()){
String s = m.group();
System.out.println(s);
}
}
}
運(yùn)行結(jié)果如下:
? ? ? ? ? ? ? ? 要點(diǎn)說(shuō)明:代碼:
Matcher m = p.matcher(str);
中的——m:文本匹配器的對(duì)象
str:大串
p:規(guī)則文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-798580.html
m:要在str中找符合p規(guī)則的小串文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-798580.html
m.find()會(huì)返回一個(gè)boolean類型的結(jié)果。如果沒有,返回false。反之返回true,并在底層記錄字串的起始索引和結(jié)束索引+1(+1之后再作為結(jié)束索引進(jìn)行傳遞)
String s = m.group();————方法底層會(huì)根據(jù)find方法記錄的索引進(jìn)行字符串的獲取:subString(起始索引,結(jié)束索引);包頭不包尾(所以find方法在結(jié)束索引位置+1就很有必要)
到了這里,關(guān)于正則表達(dá)式和爬蟲的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!