正則表示式的學習和練習
阿新 • • 發佈:2018-11-10
正則表示式通常被用來檢索、替換那些符合某個模式(規則)的文字。是用正則表示式來完成郵箱,賬號的驗證可以省去繁雜的邏輯,用更少的程式碼完成更復雜的事務。
通過學習我大致把當前學習的常見的字元分為四種:
1,預定義字元類
- .:任何字元
- \d : 數字[0-9]
- \D:非數字[^0-9]
- \s : 空白字元[\t\n\xOB\f\r]
- \S : 非空白字元[^\s]
- \w : 單詞字元[a-zA-Z_0-9]
- \W : 非單詞字元[^\w]
2,數量詞
- X? X,一次或一次也沒有;
- X* X,零次或多次;
- X+ X,一次或多次;
- X{n} X,恰好n次;
- X{n,} X,至少n次;
- X{n,m} X,至少n次,不超過m次;
3,表示邏輯運算的詞
正則表示式中的邏輯運算的詞和java中邏輯運算子基本相同,除了邏輯非在正則表示式中是使用 ^ 表示
4,三個括號的使用
- [ ]方括號中一般放預定義字元類,多個字元之間用預設邏輯或連線。
例如:
[abc] 表示a或b或c
[A-Za-z_0-9] 表示單詞字元 - { }花括號表示數量詞
- ( )圓括號表示捕獲組,圓括號中的內容作為一組來被識別
例如:
(abc) 表示abc
在圓括號中可以使用邏輯符號連線
例如:
(abc|def)表示abc或def
感覺把正則表示式大致的分為這三個類會更好理解,記憶,學習以及使用
在API文件Pattern類下提供的正則表示式的典型呼叫方法是
在API文件Pattern類下提供的正則表示式的典型呼叫方法是
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
平時使用時可以直接呼叫String類下的matchs()方法
matches
public boolean matches(String regex)告知此字串是否匹配給定的正則表示式。
呼叫此方法的 str.matches(regex) 形式與以下表達式產生的結果完全相同:
Pattern.matches(regex, str)
引數:
regex - 用來匹配此字串的正則表示式
返回:
當且僅當此字串匹配給定的正則表示式時,返回 true
丟擲:
PatternSyntaxException - 如果正則表示式的語法無效
從以下版本開始:
1.4
另請參見:
Pattern
正則表示式的常見應用
- 用正則表示式驗證郵箱賬號
/**
* 郵箱驗證
*6-18位任意單詞字元[email protected]+2-6位任意單詞字元+一位或多位.+任意單詞字元
*/
public static void test1(String str2) {
String str="\\w{6,18}@\\w{2,6}(\\.\\w)+";
//Scanner sc=new Scanner(System.in);
System.out.println("請輸入郵箱");
//String str2=sc.next();
System.out.println("str2.matches(str) "+str2.matches(str));
}
2 .正則表示式完成切割指定字元的功能
/**
*
* 切割 字串中的逗號
*/
public static void test2() {
String numbers="1,2,3,4,5,6,7,8,9,0";
String regex=",";
String [] str=numbers.split(regex);
for(int i=0;i<str.length;i++) {
System.out.println(str[i]);
}
}
3 . 正則表示式玩成替換指定字元的功能
/**
*
* 替換字串中的單詞字母
*/
public static void testReplace() {
String str="aaaa1ahnvuhfewoi11384209e7439fsdhfdohd8892489";
String regex="[a-zA-Z]";
String str2=str.replaceAll(regex, "");
System.out.println(str2);
//輸出 11138420974398892489
}
4 . 匹配並取出指定的字串
/**
*
*
* 取出指定的字串
*/
public static void testBoundary() {
// 定義字串
String s = "abc 1234 efg a d,e hhh aa";
// 規則 單詞邊界+三位任意字元+單詞邊界
String regex = "\\b\\w{3}\\b";
// 把規則編譯成模式物件
Pattern p = Pattern.compile(regex);
// 通過模式物件得到匹配器物件
Matcher m = p.matcher(s);
// 呼叫匹配器物件的功能
// 通過find方法就是查詢有沒有滿足條件的子串
//第一步,找到 find()
while (m.find()) {
//第二步 ,把找到的東西拿出來 group
String string = m.group();
System.out.println(string);
//輸出abc efg hhh
}
}
5.正則表示式的分組功能
/**
*
* 分組
* (..)表示兩位任意字元(...)表示三位任意字元1+表示第一個()的內容重複
* 一次或者多次
*/
public static void testRegexGroup() {
String regex="(..)(...)\\1+";
System.out.println("高興高高興高興高興高興高興".matches(regex));
//輸出true
System.out.println("快快樂樂".matches(regex));
//輸出false
}