初學正則表達式,希望通過寫博客來鞏固提高對知識的掌握,如有不足懇請指出。
正則表達式(Regular Expression)是一種文本模式。它使用單個字符串來描述、匹配一系列匹配某個句法規則的字符串。
正則表達式在代碼中也有regex
,regexp
,RE
等形式。總之,正則表達式就是通過一個符合某種形式的字符串去匹配另一個字符串中符合某種規則的子字符串(substring)。
正則表達式在Java中的使用:
可以通過導入java.util.regex
包來進行正則表達式相關操作
import java.util.regex.Matcher; //Matcher類根據規則去匹配字符串
import java.util.regex.Pattern; //Pattern類根據用戶的輸入生成規則
本文舉一個簡單的小例子: 匹配一個長字符串中的子字符串
String str1="Altrrria_Altrria_Altria_Altia";
String regexStr2="Altr*ia"; //設定匹配規則
Pattern p2=Pattern.compile(regexStr2); //編譯匹配規則
Matcher M2=p2.matcher(str1); //匹配目標字符串
while(M2.find()){
System.out.println("起始索引:"+M2.start());
System.out.println("結尾索引:"+M2.end());
System.out.println("匹配到的字符串:"+M2.group());
System.out.println("--------------------------");
}
先拋開內容不看,這個例子闡明瞭java.util.regex
包中 Matcher
和Pattern
類的使用方法,就我的理解來說:
(1)首先指定進行匹配的目標字符串str
(2)再確定進行匹配的模式(匹配規則)regexStr
(3)然後根據regexStr
通過Pattern類構造出一個Pattern對象p
,這個p
即代表了用戶所設定的匹配規則
(4)最後根據目標字符串str
以及規則p
構造出一個Matcher
類m
,這個m
即代表了匹配的結果,可以通過m.find()
m.start()
m.end()
來獲得匹配的結果
那麼將這個模式放到代碼中:
(1)
String str1="Altrrria_Altrria_Altria_Altia";
(2)
String regexStr2="Altr*ia";
(3)
Pattern p2=Pattern.compile(regexStr2);
(4)
Matcher M2=p2.matcher(str1);
再將目光放到正則表達式上,這個例子中設置的regex爲:String regexStr2="Altr*ia";
在r
後加上了一個*
代表r
這個字符可以出現0,1,或多次
那麼也就是說可能符合這個規則的子字符串(例如:Altia
Altria
Altrria
Altrrria
)都可以被匹配到。
通過m.find()
將結果輸出(先不管這些函數的具體實現):
/**Result:
起始索引:0
結尾索引:8
匹配到的字符串:Altrrria
--------------------------
起始索引:9
結尾索引:16
匹配到的字符串:Altrria
--------------------------
起始索引:17
結尾索引:23
匹配到的字符串:Altria
--------------------------
起始索引:24
結尾索引:29
匹配到的字符串:Altia
--------------------------
*/
一個利用正則表達式進行匹配的簡單程序就成功了 😃
當然這裏只涉及到了正則表達式中一個*
數量表達式
其他的數量表達式:
數量表達式 | 出現次數 |
---|---|
* | 0 1 多次 |
? | 0 1 |
+ | 1 多次 |
{n} | 出現n次 |
{n,m} | n<=次數 <=m |
{n,} | 至少出現n次 |