Java 實際應用中常用的正則表示式
阿新 • • 發佈:2018-11-30
1.正則表示式
jdk1.4 開始提供了正則表示式的支援;
java.util.regex
Pattern類:此類物件如果想要獲得必須使用compile(),
此方法的功能式編譯正則
Matcher類:通過Patern類取得;
2.正則標記
1.所有的正則可以使用的標記都在java.util.regex.Pattern類裡面定義了;
2. 單個字元 (數量:1)
字元:表示由一位字元所組成;
\\ : 轉義字元
\t :表示一個'\t'的符號;
\n :匹配換行(\n) 符號;
3.字符集(數量:1)
[abc] :表示可能是字元a,b,中的任意一位
[^abc]:表示不是a,b,c中的任意一位
[a-z]:所有的小寫字母
[a-zA-Z]:所有的字母
[0-9] :任意的一位數字
4.簡化的字符集表示式(數量:1)
. :表示任意一個字元
\d :等價於[0-9]
\D :非0-9的字元
\s :表示任意的空白字元 如'\t','\n'
\S :表示任意的非空白字元;
\w :等價於[a-zA-Z0-9_] 表示由任意的字母,數字,-,組成
\W :表示[^a-zA-Z0-9_]
5.邊界匹配(不要再java中使用,再javaScript中使用)
^:正則開始
$:正則結束
6.數量表達式
正則?:表示此正則可以出現0次或1次
正則+:表示此正則可以出現1次或1次以上;
正則{n}:表示此正則可以出現n次
正則{n,}:表示此正則出現n次以上(包含n次)
正則{n,m}:表示此正則出現n次到m次
7.正則1正則2
正則1|正則2 :正則1或正則2有一種滿足則可
(正則) 將多個正則作為一組,可以為這一組單獨設定出先的次數
String類對正則的支援
jdk1.4 引入了正則的支援,Stirng類也添加了相應的支援
matches(String regex) 正則驗證,使用指定的字串判斷其是否滿足給定的正則表示式的結構;
replaceAll(String regx,String replacement)全部替換
replaceFirst(String regx,String replacement)替換首個
split(String regex)全部拆分;
split(String regex,int limit) 部分拆分;
//將所有的非小寫字母替換為"";
String str="88drrrrr*RRE*&(33lslfWWWWabckdd";
String pattern="[^a-z]";
String replaceAll = str.replaceAll(pattern, "");
System.out.println(replaceAll);//drrrrrlslfabckdd
//根據數字拆分字母
String str1="aaa55bb8888cc444444uuuuu55555uuKKKK";
String pattern1="\\d+";
String[] split = str1.split(pattern1);
for (String string : split) {
System.out.println(string);
}
//驗證一個字串是否式數字,如果是轉為double
String str3="1";
String pattern3="\\d+(\\.\\d+)?";
System.out.println(str3.matches(pattern3));
//判斷給定的字串是不是一個ip地址 192.168.1.1 每一段最大長度是3
String str4="192.168.1.1";
String pattern4= "(\\d{1,3}\\.){3}\\d{1,3}";
System.out.println(str4.matches(pattern4));
//email
/* 使用者名稱由字母、數字、字母、下劃線、點組成
使用者名稱 必須以字母開頭 可以以數字和字母結尾
長度不能超過30位
最後的根域名只能是.com ,.cn ,.net,.com.cn,.edu,.gov,.org*/
String email="[email protected]";
//開頭[a-zA-Z]
//中間段[a-zA-Z0-9_\\.]{0,28}
//結尾[a-zA-Z0-9]
//@
//緊跟@後面的e \\w+
// \\.
//(net|cn|com|com\\.cn|net\\.cn|edu|gov|org)
String pattern_email="[a-zA-Z][a-zA-Z0-9_\\\\.]{0,28}[a-zA-Z0-9]@\\w+\\.(net|cn|com|com\\\\.cn|net\\\\.cn|edu|gov|org)";
System.out.println(email.matches(email));
//字串拆分
String str_split="aa3333ddddd333ddlll33ll3";
String reg="\\d+";
Pattern compile = Pattern.compile(reg);
String[] split2 = compile.split(str_split);
System.out.println(Arrays.toString(split2));
//字串驗證
String str6="323237";
String reg6="\\d+";
Pattern p = Pattern.compile(reg);//編譯正則
Matcher matcher = p.matcher(str6);//進行正則匹配
System.out.println(matcher.matches());//匹配的結果
//String類本身支援了這兩種操作,所有對String而言很少再去利用Pattern和Matcher類這兩個類進行操作;
//可以實現程式碼的最小化
//正則表示式
// java中'\'本身具有轉義意義;如果要輸出'\' 需要使用'\\'
// System.out.println("a\nb\\");
String input1="hello ";
String pattern1="hello.";//.匹配任何一個字元 (hello後必須有一位)
//.(點)匹配除"\r\n"之外的任何單個字元;
System.out.println(Pattern.matches(pattern1, input1));
//手機號碼(第一位是1,第二位是3,4,5,7,8,第三位則是0-9,第三位之後則是數字0-9)
String input2="17673195654";
String pattern2="^1(3|4|5|7|9)\\d{9}";
// x|y 匹配x或y
// ()圓括號表示分一組組
// {}花括號表示出現的次數 ; +表示一個或多個; *表示零個或多個;?表示零個或一個;
// {n} 表示匹配n次;{n,}至少匹配n次;{m,n}匹配至少m次,最多n次
// \\d數字字元匹配。等效於 [0-9]。
// '\\' 在java中'\'本身具有轉義意義;如果要輸出'\' 需要使用'\\'
// '^'配輸入字串開始的位置
System.out.println(Pattern.matches(pattern2, input2));
//郵箱
//26個大小寫英文字母表示為a-zA-Z
// 數字表示為0-9
//下劃線表示為_
//中劃線表示為-
// 由於名稱是由若干個字母、數字、下劃線和中劃線組成,所以需要用到+表示多次出現
String input3="[email protected]";
String pattern3="^[a-zA-Z0-9_-][email protected][a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]+$";
System.out.println(Pattern.matches(pattern3, input3));
// [] 字元組/字符集
// \\. 匹配點
//兩位正整數
String input4="1";
String pattern4="^\\d{1,2}$";
System.out.println(Pattern.matches(pattern4, input4));
//數字 :大於等於0的數(整數和小數(保留兩位))
String pattern5="^\\d+(\\.\\d{2}+)?$";
String input5="1.44";
System.out.println(Pattern.matches(pattern5, input5));
//數字(整數、負數、小數(保留兩位小數))
String input6="-10.98";
String pattern6="^(\\-|\\+)?\\d+(\\.\\d{2}+)?$";
System.out.println(Pattern.matches(pattern6, input6));
//數字1-99之間的包含1和99的數
String input7="99";
String pattern7="^[1-9][0-9]?$";
System.out.println(Pattern.matches(pattern7, input7));