正則表示式是計算機科學的一個概念。正則表示式使用單個字串來描述、匹配一系列符合某個句法規則的字串。在很多文字編輯器裡,正則表示式通常被用來檢索、替換那些符合某個模式的文字。那麼java正則表示式的內容是什麼呢?下面跟yjbys小編一起來看看吧!
一、正則表示式到底是什麼東西?
在編寫處理字串的程式或網頁時,經常會有查詢符合某些複雜規則的字串的需要。正則表示式就是用於描述這些規則的工具。換句話說,正則表示式就是記錄文字規則的程式碼。
很可能你使用過Windows/Dos下用於檔案查詢的萬用字元(wildcard),也就是*和?。如果你想查詢某個目錄下的所有的Word文件的話,你會搜尋*。在這裡,*會被解釋成任意的字串。和萬用字元類似,正則表示式也是用來進行文字匹配的工具,只不過比起萬用字元,它能更精確地描述你的需求——當然,代價就是更復雜——比如你可以編寫一個正則表示式,用來查詢所有以0開頭,後面跟著2-3個數字,然後是一個連字號“-”,最後是7或8位數字的字串(像010-12345678或0376-7654321)。
二、正則表示式的基本操作
正則表示式定義:符合一定規則的表示式。
作用:用於專門操作字串。
特點:用於一些特定的符號來表示一些程式碼操作。這樣就簡化書寫。所以學習正則表示式,就是在學習一些特殊符號的使用。
好處:可以簡化對字串的複雜操作。
弊端:符號定義越多,正則越長,閱讀性越差。
具體操作功能:
1,匹配:String matches方法。用規則匹配整個字串,只要有一處不符合規則,就匹配結束,返回false。
2,切割:String split();
3,替換:String replaceAll(regex,str);如果regex中有定義組,可以在第二引數中通過$符號獲取正則表示式中的已有的組。
4,獲取:將字串中的符合規則的子串取出。
操作步驟:
1),將正則表示式封裝成物件。
2),讓正則物件和要操作的字串相關聯。
3),關聯後,獲取正則匹配引擎。
4),通過引擎對符合規則的子串進行操作,比如取出。
三、API文件中常用符號
字元類 | |
[abc] | a、b 或 c(簡單類) |
[^abc] | 任何字元,除了 a、b 或 c(否定) |
[a-zA-Z] | a 到 z 或 A 到 Z,兩頭的字母包括在內(範圍) |
[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](減去) |
預定義字元類 | |
. | 任何字元(與行結束符可能匹配也可能不匹配) |
d | 數字:[0-9] |
D | 非數字: [^0-9] |
s | 空白字元:[ tnx0Bfr] |
S | 非空白字元:[^s] |
w | 單詞字元:[a-zA-Z_0-9] |
W | 非單詞字元:[^w] |
邊界匹配器 | |
^ | 行的開頭 |
$ | 行的結尾 |
b | 單詞邊界 |
B | 非單詞邊界 |
A | 輸入的開頭 |
G | 上一個匹配的結尾 |
Z | 輸入的結尾,僅用於最後的結束符(如果有的話) |
z | 輸入的結尾 |
Greedy 數量詞 | |
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) 將給定的正則表示式編譯到模式中。 |
static Pattern | compile(String regex, int flags) 將給定的正則表示式編譯到具有給定標誌的.模式中。 |
int | flags() 返回此模式的匹配標誌。 |
Matcher | matcher(CharSequence input) 建立匹配給定輸入與此模式的匹配器。 |
static boolean | matches(String regex, CharSequence input) 編譯給定正則表示式並嘗試將給定輸入與其匹配。 |
String | pattern() 返回在其中編譯過此模式的正則表示式。 |
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}";
tln(hes(telReg));
}
2)數字和字母組成的字串匹配
public static void demo()
{
String str = "b23a23456789";
String reg = "[a-zA-Z]d*";
boolean b= hes(reg);
tln(b);
}
3)QQ號碼匹配
要求:5~15 0不能開頭,只能是數字
public static void checkQQ()
{
String qq = "123a454";
String regex = "[1-9]d{4,14}";
boolean flag = hes(regex);
if(flag)
tln(qq+" ok");
else
tln(qq+"... 不合法");
}
2、切割案例
按照.進行切割:splitDemo("wu",".");
按照進行切割:splitDemo("c:abc","\");
按照多個空格來進行切割:String reg = " +";空格+
按照疊詞切割:splitDemo("erkktyqqquizzzzzo","(.)1+");//按照疊詞完成切割。為了可以讓規則的結果被重用,可以將規則封裝成一個組。用()完成。組的出現都有編號。從1開始。 想要使用已有的組可以通過 n(n就是組的編號)的形式來獲取。
3、替換案例
將字串中的陣列替換成#。
String str = "wer1389980000ty1234564uiod234345675f";
replaceAllDemo(str,"d{5,}","#");
將重疊的字元替換成單個字母。zzzz->z
String str1 = "erkktyqqquizzzzzo";//
replaceAllDemo(str1,"(.)1+","$1");
4、獲取案例
獲取:將字串中的符合規則的子串取出。
public static void getDemo()
{
String str = "ming tian jiu yao fang jia le ,da jia。";
tln(str);
String reg = "b[a-z]{4}b";
//將規則封裝成物件。
Pattern p = ile(reg);
//讓正則物件和要作用的字串相關聯。獲取匹配器物件。
Matcher m = her(str);
//將規則作用到字串上,並進行符合規則的子串迴圈查詢。
while(())
{
//用於獲取匹配後結果。
tln(p());
tln(t()+"...."+());
}
}