- 相關(guān)推薦
java中正則表達(dá)式概述
正則表達(dá)式是計(jì)算機(jī)科學(xué)的一個(gè)概念。正則表達(dá)式使用單個(gè)字符串來(lái)描述、匹配一系列符合某個(gè)句法規(guī)則的字符串。在很多文本編輯器里,正則表達(dá)式通常被用來(lái)檢索、替換那些符合某個(gè)模式的文本。那么java正則表達(dá)式的內(nèi)容是什么呢?下面跟yjbys小編一起來(lái)看看吧!
一、正則表達(dá)式到底是什么東西?
在編寫(xiě)處理字符串的程序或網(wǎng)頁(yè)時(shí),經(jīng)常會(huì)有查找符合某些復(fù)雜規(guī)則的字符串的需要。正則表達(dá)式就是用于描述這些規(guī)則的工具。換句話說(shuō),正則表達(dá)式就是記錄文本規(guī)則的代碼。
很可能你使用過(guò)Windows/Dos下用于文件查找的通配符(wildcard),也就是*和?。如果你想查找某個(gè)目錄下的所有的Word文檔的話,你會(huì)搜索*.doc。在這里,*會(huì)被解釋成任意的字符串。和通配符類(lèi)似,正則表達(dá)式也是用來(lái)進(jìn)行文本匹配的工具,只不過(guò)比起通配符,它能更精確地描述你的需求——當(dāng)然,代價(jià)就是更復(fù)雜——比如你可以編寫(xiě)一個(gè)正則表達(dá)式,用來(lái)查找所有以0開(kāi)頭,后面跟著2-3個(gè)數(shù)字,然后是一個(gè)連字號(hào)“-”,最后是7或8位數(shù)字的字符串(像010-12345678或0376-7654321)。
二、正則表達(dá)式的基本操作
正則表達(dá)式定義:符合一定規(guī)則的表達(dá)式。
作用:用于專(zhuān)門(mén)操作字符串。
特點(diǎn):用于一些特定的符號(hào)來(lái)表示一些代碼操作。這樣就簡(jiǎn)化書(shū)寫(xiě)。所以學(xué)習(xí)正則表達(dá)式,就是在學(xué)習(xí)一些特殊符號(hào)的使用。
好處:可以簡(jiǎn)化對(duì)字符串的復(fù)雜操作。
弊端:符號(hào)定義越多,正則越長(zhǎng),閱讀性越差。
具體操作功能:
1,匹配:String matches方法。用規(guī)則匹配整個(gè)字符串,只要有一處不符合規(guī)則,就匹配結(jié)束,返回false。
2,切割:String split();
3,替換:String replaceAll(regex,str);如果regex中有定義組,可以在第二參數(shù)中通過(guò)$符號(hào)獲取正則表達(dá)式中的已有的組。
4,獲。簩⒆址械姆弦(guī)則的子串取出。
操作步驟:
1),將正則表達(dá)式封裝成對(duì)象。
2),讓正則對(duì)象和要操作的字符串相關(guān)聯(lián)。
3),關(guān)聯(lián)后,獲取正則匹配引擎。
4),通過(guò)引擎對(duì)符合規(guī)則的子串進(jìn)行操作,比如取出。
三、API文檔中常用符號(hào)
字符類(lèi) |
|
[abc] |
a、b 或 c(簡(jiǎn)單類(lèi)) |
[^abc] |
任何字符,除了 a、b 或 c(否定) |
[a-zA-Z] |
a 到 z 或 A 到 Z,兩頭的字母包括在內(nèi)(范圍) |
[a-d[m-p]] |
a 到 d 或 m 到 p:[a-dm-p](并集) |
[a-z&&[def]] |
d、e 或 f(交集) |
[a-z&&[^bc]] |
a 到 z,除了 b 和 c:[ad-z](減去) |
[a-z&&[^m-p]] |
a 到 z,而非 m 到 p:[a-lq-z](減去) |
預(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] |
邊界匹配器 |
|
^ |
行的開(kāi)頭 |
$ |
行的結(jié)尾 |
\b |
單詞邊界 |
\B |
非單詞邊界 |
\A |
輸入的開(kāi)頭 |
\G |
上一個(gè)匹配的結(jié)尾 |
\Z |
輸入的結(jié)尾,僅用于最后的結(jié)束符(如果有的話) |
\z |
輸入的結(jié)尾 |
Greedy 數(shù)量詞 |
|
X? |
X,一次或一次也沒(méi)有 |
X* |
X,零次或多次 |
X+ |
X,一次或多次 |
X{n} |
X,恰好 n 次 |
X{n,} |
X,至少 n 次 |
X{n,m} |
X,至少 n 次,但是不超過(guò) m 次 |
四、方法摘要
static Pattern |
compile(String regex) 將給定的正則表達(dá)式編譯到模式中。 |
static Pattern |
compile(String regex, int flags) 將給定的正則表達(dá)式編譯到具有給定標(biāo)志的模式中。 |
int |
flags() 返回此模式的匹配標(biāo)志。 |
Matcher |
matcher(CharSequence input) 創(chuàng)建匹配給定輸入與此模式的匹配器。 |
static boolean |
matches(String regex, CharSequence input) 編譯給定正則表達(dá)式并嘗試將給定輸入與其匹配。 |
String |
pattern() 返回在其中編譯過(guò)此模式的正則表達(dá)式。 |
static String |
quote(String s) 返回指定 String 的字面值模式 String。 |
String[] |
split(CharSequence input) 圍繞此模式的匹配拆分給定輸入序列。 |
String[] |
split(CharSequence input, int limit) 圍繞此模式的匹配拆分給定輸入序列。 |
String |
toString() 返回此模式的字符串表示形式。 |
五、案例
1、匹配案例
1)電話號(hào)碼匹配案例
public static void checkTel()
{
String tel = "16900001111";
String telReg = "1[358]\\d{9}";
System.out.println(tel.matches(telReg));
}
2)數(shù)字和字母組成的字符串匹配
public static void demo()
{
String str = "b23a23456789";
String reg = "[a-zA-Z]\\d*";
boolean b= str.matches(reg);
System.out.println(b);
}
3)QQ號(hào)碼匹配
要求:5~15 0不能開(kāi)頭,只能是數(shù)字
public static void checkQQ()
{
String qq = "123a454";
String regex = "[1-9]\\d{4,14}";
boolean flag = qq.matches(regex);
if(flag)
System.out.println(qq+"...is ok");
else
System.out.println(qq+"... 不合法");
}
2、切割案例
按照.進(jìn)行切割:splitDemo("zhangsan.lisi.wangwu","\\.");
按照\(chéng)\進(jìn)行切割:splitDemo("c:\\abc\\a.txt","\\\\");
按照多個(gè)空格來(lái)進(jìn)行切割:String reg = " +";空格+
按照疊詞切割:splitDemo("erkktyqqquizzzzzo","(.)\\1+");//按照疊詞完成切割。為了可以讓規(guī)則的結(jié)果被重用,可以將規(guī)則封裝成一個(gè)組。用()完成。組的出現(xiàn)都有編號(hào)。從1開(kāi)始。 想要使用已有的組可以通過(guò) \n(n就是組的編號(hào))的形式來(lái)獲取。
3、替換案例
將字符串中的數(shù)組替換成#。
String str = "wer1389980000ty1234564uiod234345675f";
replaceAllDemo(str,"\\d{5,}","#");
將重疊的字符替換成單個(gè)字母。zzzz->z
String str1 = "erkktyqqquizzzzzo";//
replaceAllDemo(str1,"(.)\\1+","$1");
4、獲取案例
獲取:將字符串中的符合規(guī)則的子串取出。
public static void getDemo()
{
String str = "ming tian jiu yao fang jia le ,da jia。";
System.out.println(str);
String reg = "\\b[a-z]{4}\\b";
//將規(guī)則封裝成對(duì)象。
Pattern p = Pattern.compile(reg);
//讓正則對(duì)象和要作用的字符串相關(guān)聯(lián)。獲取匹配器對(duì)象。
Matcher m = p.matcher(str);
//將規(guī)則作用到字符串上,并進(jìn)行符合規(guī)則的子串循環(huán)查找。
while(m.find())
{
//用于獲取匹配后結(jié)果。
System.out.println(m.group());
System.out.println(m.start()+"...."+m.end());
}
}
【java中正則表達(dá)式概述】相關(guān)文章:
Java與Java web有什么不同01-22
公文的概述及寫(xiě)作02-24
濕地相關(guān)知識(shí)概述08-29
二胡的把位概述04-22
社會(huì)保障法概述05-08
阿拉伯語(yǔ)語(yǔ)法概述02-20
建設(shè)工程質(zhì)量控制概述04-11