- 相關(guān)推薦
java中正則表達(dá)式概述
正則表達(dá)式是計(jì)算機(jī)科學(xué)的一個(gè)概念。正則表達(dá)式使用單個(gè)字符串來描述、匹配一系列符合某個(gè)句法規(guī)則的字符串。在很多文本編輯器里,正則表達(dá)式通常被用來檢索、替換那些符合某個(gè)模式的文本。那么java正則表達(dá)式的內(nèi)容是什么呢?下面跟yjbys小編一起來看看吧!
一、正則表達(dá)式到底是什么東西?
在編寫處理字符串的程序或網(wǎng)頁時(shí),經(jīng)常會有查找符合某些復(fù)雜規(guī)則的字符串的需要。正則表達(dá)式就是用于描述這些規(guī)則的工具。換句話說,正則表達(dá)式就是記錄文本規(guī)則的代碼。
很可能你使用過Windows/Dos下用于文件查找的通配符(wildcard),也就是*和?。如果你想查找某個(gè)目錄下的所有的Word文檔的話,你會搜索*.doc。在這里,*會被解釋成任意的字符串。和通配符類似,正則表達(dá)式也是用來進(jìn)行文本匹配的工具,只不過比起通配符,它能更精確地描述你的需求——當(dāng)然,代價(jià)就是更復(fù)雜——比如你可以編寫一個(gè)正則表達(dá)式,用來查找所有以0開頭,后面跟著2-3個(gè)數(shù)字,然后是一個(gè)連字號“-”,最后是7或8位數(shù)字的字符串(像010-12345678或0376-7654321)。
二、正則表達(dá)式的基本操作
正則表達(dá)式定義:符合一定規(guī)則的表達(dá)式。
作用:用于專門操作字符串。
特點(diǎn):用于一些特定的符號來表示一些代碼操作。這樣就簡化書寫。所以學(xué)習(xí)正則表達(dá)式,就是在學(xué)習(xí)一些特殊符號的使用。
好處:可以簡化對字符串的復(fù)雜操作。
弊端:符號定義越多,正則越長,閱讀性越差。
具體操作功能:
1,匹配:String matches方法。用規(guī)則匹配整個(gè)字符串,只要有一處不符合規(guī)則,就匹配結(jié)束,返回false。
2,切割:String split();
3,替換:String replaceAll(regex,str);如果regex中有定義組,可以在第二參數(shù)中通過$符號獲取正則表達(dá)式中的已有的組。
4,獲。簩⒆址械姆弦(guī)則的子串取出。
操作步驟:
1),將正則表達(dá)式封裝成對象。
2),讓正則對象和要操作的字符串相關(guān)聯(lián)。
3),關(guān)聯(lián)后,獲取正則匹配引擎。
4),通過引擎對符合規(guī)則的子串進(jìn)行操作,比如取出。
三、API文檔中常用符號
字符類 |
|
[abc] |
a、b 或 c(簡單類) |
[^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ù)定義字符類 |
|
. |
任何字符(與行結(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] |
邊界匹配器 |
|
^ |
行的開頭 |
$ |
行的結(jié)尾 |
\b |
單詞邊界 |
\B |
非單詞邊界 |
\A |
輸入的開頭 |
\G |
上一個(gè)匹配的結(jié)尾 |
\Z |
輸入的結(jié)尾,僅用于最后的結(jié)束符(如果有的話) |
\z |
輸入的結(jié)尾 |
Greedy 數(shù)量詞 |
|
X? |
X,一次或一次也沒有 |
X* |
X,零次或多次 |
X+ |
X,一次或多次 |
X{n} |
X,恰好 n 次 |
X{n,} |
X,至少 n 次 |
X{n,m} |
X,至少 n 次,但是不超過 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() 返回在其中編譯過此模式的正則表達(dá)式。 |
static String |
quote(String s) 返回指定 String 的字面值模式 String。 |
String[] |
split(CharSequence input) 圍繞此模式的匹配拆分給定輸入序列。 |
String[] |
split(CharSequence input, int limit) 圍繞此模式的匹配拆分給定輸入序列。 |
String |
toString() 返回此模式的字符串表示形式。 |
五、案例
1、匹配案例
1)電話號碼匹配案例
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號碼匹配
要求:5~15 0不能開頭,只能是數(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","\\.");
按照\\進(jìn)行切割:splitDemo("c:\\abc\\a.txt","\\\\");
按照多個(gè)空格來進(jìn)行切割:String reg = " +";空格+
按照疊詞切割:splitDemo("erkktyqqquizzzzzo","(.)\\1+");//按照疊詞完成切割。為了可以讓規(guī)則的結(jié)果被重用,可以將規(guī)則封裝成一個(gè)組。用()完成。組的出現(xiàn)都有編號。從1開始。 想要使用已有的組可以通過 \n(n就是組的編號)的形式來獲取。
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ī)則封裝成對象。
Pattern p = Pattern.compile(reg);
//讓正則對象和要作用的字符串相關(guān)聯(lián)。獲取匹配器對象。
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正則表達(dá)式語法大全03-29
Java中的動態(tài)代碼編程03-05
在Java中執(zhí)行JavaScript代碼04-01
Oracle正則表達(dá)式匯集03-28
JAVA和.NET開發(fā)過程中的區(qū)別04-27
java中continue跳轉(zhuǎn)語句使用方法03-29
java中File類有哪些使用方法03-14