在Java中,正則表達式是一種強大的工具,用來校驗和處理字符串數據。這篇文章將從入門到實戰的角度,介紹Java正則表達式的基礎知識和實用技巧。
一、正則表達式基礎
正則表達式是一個由字符和操作符組成的模式,用來描述文本中的字串篩選規則。在Java中,可以使用java.util.regex包中的類來處理正則表達式。
1.字符匹配
String pattern = "abc";//匹配abc字符串 String str = "abc";//要匹配的字符串 System.out.println(str.matches(pattern));//true
2.字符集合
String pattern = "[abc]";//匹配a、b或c單個字符 String str = "a";//要匹配的字符串 System.out.println(str.matches(pattern));//true
3.字符數量
String pattern = "a{3}";//匹配3個a字符 String str = "aaa";//要匹配的字符串 System.out.println(str.matches(pattern));//true pattern = "a{2,}";//匹配2個或以上a字符 str = "aaa";//要匹配的字符串 System.out.println(str.matches(pattern));//true pattern = "a{2,4}";//匹配2個到4個a字符 str = "aaa";//要匹配的字符串 System.out.println(str.matches(pattern));//true
4.特殊字符
String pattern = "\\d";//匹配數字字符 String str = "1";//要匹配的字符串 System.out.println(str.matches(pattern));//true pattern = "\\D";//匹配非數字字符 str = "a";//要匹配的字符串 System.out.println(str.matches(pattern));//true pattern = "\\s";//匹配空白字符 str = " ";//要匹配的字符串 System.out.println(str.matches(pattern));//true pattern = "\\S";//匹配非空白字符 str = "a";//要匹配的字符串 System.out.println(str.matches(pattern));//true pattern = "\\w";//匹配字母數字字符 str = "a";//要匹配的字符串 System.out.println(str.matches(pattern));//true pattern = "\\W";//匹配非字母數字字符 str = "!";//要匹配的字符串 System.out.println(str.matches(pattern));//true
二、實際應用場景
在Java開發中,正則表達式可以用於以下實際應用場景:
1.校驗用戶輸入
//檢查郵箱格式 String pattern = "[a-zA-Z0-9_-]+@[a-zA-Z0-9]+\\.[a-zA-Z]+"; String email = "abc@test.com"; System.out.println(email.matches(pattern));//true //檢查手機號格式 pattern = "1[3456789]\\d{9}"; String phone = "13712345678"; System.out.println(phone.matches(pattern));//true //檢查身份證號格式 pattern = "[1-9]\\d{5}(18|19|20)\\d{2}(0\\d|1[012])(0\\d|[12]\\d|3[01])\\d{3}[Xx\\d]"; String idCard = "310101199001010101"; System.out.println(idCard.matches(pattern));//true
2.替換特定字符
String pattern = "";//剔除HTML標籤 String html = "這是一段測試文本
"; System.out.println(html.replaceAll(pattern, ""));//這是一段測試文本 pattern = "(\\d{4})-(\\d{2})-(\\d{2})";//格式化日期字符串 String date = "20210101"; String result = date.replaceAll(pattern, "$1年$2月$3日"); System.out.println(result);//2021年01月01日
3.提取關鍵信息
String pattern = "(?<=\\()[^)\\s]+(?=\\))";//提取括號內的內容 String str = "這是一段(括號內的)測試文本"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(str); if (m.find()) { System.out.println(m.group(0));//括號內的 } pattern = "(?=.*[a-zA-Z])(?=.*\\d)[^\\s]{8,16}";//匹配至少8個字符,並包含至少一個字母和一個數字 String password = "password1"; System.out.println(password.matches(pattern));//true
三、實戰練習
接下來,帶大家完成一個實際練習,校驗手機號碼歸屬地。
1.獲取手機號碼前7位
String phone = "13712345678"; String areaCode = phone.substring(0, 7); System.out.println(areaCode);//1371234
2.請求接口
String url = "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel="; String response = HttpUtil.get(url + areaCode); System.out.println(response);//{"mts":"1370000-1399999","province":"廣東","catName":"中國移動","telString":"1371234"}
3.使用正則表達式提取信息
String pattern = "(?<=province\":\")[^\"]+(?=\")";//提取省份信息 Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(response); if (m.find()) { System.out.println("所在省份:" + m.group(0));//所在省份:廣東 } pattern = "(?<=catName\":\")[^\"]+(?=\")";//提取運營商信息 r = Pattern.compile(pattern); m = r.matcher(response); if (m.find()) { System.out.println("運營商:" + m.group(0));//運營商:中國移動 }
通過手機號碼前7位,使用正則表達式校驗手機號碼歸屬地,並獲取相關信息。
原創文章,作者:WLYO,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/141337.html