移動的號段:134(0-8)、135、136、137、138、139、147(預計用於TD上網卡) * 、150、151、152、157(TD專用)、158、159、187(未啟用)、188(TD專用) 聯通的號段:130、131、132、155、156(世界風專用)、185(未啟用)、186(3g ...
java 正則表達式常用的字元說明 常用的正則表達式 java 正則表達式的使用 常用的工具類 RexUtils(匹配電話號碼,身份張,電子郵箱,IP地址等) java 正則表達式常用的字元說明 字元 說明 \ 將下一字元標記為特殊字元、文本、反向引用或八進位轉義符。例如,”n”匹配字元”n”。”\n”匹配換行符。序列”\\”匹配”\”,”\(“匹配”(“。 ^ 匹配輸入字元串開始的位置。如果設置了 RegExp 對象的 Multiline 屬性,^ 還會與”\n”或”\r”之後的位置匹配。 $ 匹配輸入字元串結尾的位置。如果設置了 RegExp 對象的 Multiline 屬性,$ 還會與”\n”或”\r”之前的位置匹配。 * 零次或多次匹配前面的字元或子表達式。例如,zo* 匹配”z”和”zoo”。* 等效於 {0,}。 + 一次或多次匹配前面的字元或子表達式。例如,”zo+”與”zo”和”zoo”匹配,但與”z”不匹配。+ 等效於 {1,}。 ? 零次或一次匹配前面的字元或子表達式。例如,”do(es)?”匹配”do”或”does”中的”do”。? 等效於 {0,1}。 {n} n 是非負整數。正好匹配 n 次。例如,”o{2}”與”Bob”中的”o”不匹配,但與”food”中的兩個”o”匹配。 {n,} n 是非負整數。至少匹配 n 次。例如,”o{2,}”不匹配”Bob”中的”o”,而匹配”foooood”中的所有 o。”o{1,}”等效於”o+”。”o{0,}”等效於”o*”。 {n,m} M 和 n 是非負整數,其中 n <= m。匹配至少 n 次,至多 m 次。例如,”o{1,3}”匹配”fooooood”中的頭三個 o。’o{0,1}’ 等效於 ‘o?’。註意:您不能將空格插入逗號和數字之間。 ? 當此字元緊隨任何其他限定符(*、+、?、{n}、{n,}、{n,m})之後時,匹配模式是”非貪心的”。”非貪心的”模式匹配搜索到的、儘可能短的字元串,而預設的”貪心的”模式匹配搜索到的、儘可能長的字元串。例如,在字元串”oooo”中,”o+?”只匹配單個”o”,而”o+”匹配所有”o”。 . 匹配除”\r\n”之外的任何單個字元。若要匹配包括”\r\n”在內的任意字元,請使用諸如”[\s\S]”之類的模式。 (pattern) 匹配 pattern 並捕獲該匹配的子表達式。可以使用 0…9 屬性從結果”匹配”集合中檢索捕獲的匹配。若要匹配括弧字元 ( ),請使用”(“或者”)”。 (?:pattern) 匹配 pattern 但不捕獲該匹配的子表達式,即它是一個非捕獲匹配,不存儲供以後使用的匹配。這對於用”or”字元 ( (?=pattern) 執行正向預測先行搜索的子表達式,該表達式匹配處於匹配 pattern 的字元串的起始點的字元串。它是一個非捕獲匹配,即不能捕獲供以後使用的匹配。例如,’Windows (?=95 (?!pattern) 執行反向預測先行搜索的子表達式,該表達式匹配不處於匹配 pattern 的字元串的起始點的搜索字元串。它是一個非捕獲匹配,即不能捕獲供以後使用的匹配。例如,’Windows (?!95 x y [xyz] 字元集。匹配包含的任一字元。例如,”[abc]”匹配”plain”中的”a”。 [^xyz] 反向字元集。匹配未包含的任何字元。例如,”[^abc]”匹配”plain”中”p”,”l”,”i”,”n”。 [a-z] 字元範圍。匹配指定範圍內的任何字元。例如,”[a-z]”匹配”a”到”z”範圍內的任何小寫字母。 [^a-z] 反向範圍字元。匹配不在指定的範圍內的任何字元。例如,”[^a-z]”匹配任何不在”a”到”z”範圍內的任何字元。 \b 匹配一個字邊界,即字與空格間的位置。例如,”er\b”匹配”never”中的”er”,但不匹配”verb”中的”er”。 \B 非字邊界匹配。”er\B”匹配”verb”中的”er”,但不匹配”never”中的”er”。 \cx 匹配 x 指示的控制字元。例如,\cM 匹配 Control-M 或回車符。x 的值必須在 A-Z 或 a-z 之間。如果不是這樣,則假定 c 就是”c”字元本身。 \d 數字字元匹配。等效於 [0-9]。 \D 非數字字元匹配。等效於 [^0-9]。 \f 換頁符匹配。等效於 \x0c 和 \cL。 \n 換行符匹配。等效於 \x0a 和 \cJ。 \r 匹配一個回車符。等效於 \x0d 和 \cM。 \s 匹配任何空白字元,包括空格、製表符、換頁符等。與 [ \f\n\r\t\v] 等效。 \S 匹配任何非空白字元。與 [^ \f\n\r\t\v] 等效。 \t 製表符匹配。與 \x09 和 \cI 等效。 \v 垂直製表符匹配。與 \x0b 和 \cK 等效。 \w 匹配任何字類字元,包括下劃線。與”[A-Za-z0-9_]”等效。 \W 與任何非單詞字元匹配。與”[^A-Za-z0-9_]”等效。 \xn 匹配 n,此處的 n 是一個十六進位轉義碼。十六進位轉義碼必須正好是兩位數長。例如,”\x41”匹配”A”。”\x041”與”\x04”&”1”等效。允許在正則表達式中使用 ASCII 代碼。 \num 匹配 num,此處的 num 是一個正整數。到捕獲匹配的反向引用。例如,”(.)\1”匹配兩個連續的相同字元。 \n 標識一個八進位轉義碼或反向引用。如果 \n 前面至少有 n 個捕獲子表達式,那麼 n 是反向引用。否則,如果 n 是八進位數 (0-7),那麼 n 是八進位轉義碼。 \nm 標識一個八進位轉義碼或反向引用。如果 \nm 前面至少有 nm 個捕獲子表達式,那麼 nm 是反向引用。如果 \nm 前面至少有 n 個捕獲,則 n 是反向引用,後面跟有字元 m。如果兩種前面的情況都不存在,則 \nm 匹配八進位值 nm,其中 n 和 m 是八進位數字 (0-7)。 \nml 當 n 是八進位數 (0-3),m 和 l 是八進位數 (0-7) 時,匹配八進位轉義碼 nml。 \un 匹配 n,其中 n 是以四位十六進位數表示的 Unicode 字元。例如,\u00A9 匹配版權符號 (©)。 以上內容來自 Java 正則表達式,該文章裡面寫得很細。 常用的正則表達式 以下內容來源於博客 最全的常用正則表達式大全——包括校驗數字、字元、一些特殊的需求等等 一、校驗數字的表達式 1 數字:^[0-9]*$ 2 n位的數字:^\d{n}$ 3 至少n位的數字:^\d{n,}$ 4 m-n位的數字:^\d{m,n}$ 5 零和非零開頭的數字:^(0|[1-9][0-9]*)$ 6 非零開頭的最多帶兩位小數的數字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 7 帶1-2位小數的正數或負數:^(\-)?\d+(\.\d{1,2})?$ 8 正數、負數、和小數:^(\-|\+)?\d+(\.\d+)?$ 9 有兩位小數的正實數:^[0-9]+(.[0-9]{2})?$ 10 有1~3位小數的正實數:^[0-9]+(.[0-9]{1,3})?$ 11 非零的正整數:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$ 12 非零的負整數:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$ 13 非負整數:^\d+$ 或 ^[1-9]\d*|0$ 14 非正整數:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$ 15 非負浮點數:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ 16 非正浮點數:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ 17 正浮點數:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$ 18 負浮點數:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$ 19 浮點數:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ 二、校驗字元的表達式 1 漢字:^[\u4e00-\u9fa5]{0,}$ 2 英文和數字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$ 3 長度為3-20的所有字元:^.{3,20}$ 4 由26個英文字母組成的字元串:^[A-Za-z]+$ 5 由26個大寫英文字母組成的字元串:^[A-Z]+$ 6 由26個小寫英文字母組成的字元串:^[a-z]+$ 7 由數字和26個英文字母組成的字元串:^[A-Za-z0-9]+$ 8 由數字、26個英文字母或者下劃線組成的字元串:^\w+$ 或 ^\w{3,20}$ 9 中文、英文、數字包括下劃線:^[\u4E00-\u9FA5A-Za-z0-9_]+$ 10 中文、英文、數字但不包括下劃線等符號:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$ 11 可以輸入含有^%&',;=?$\"等字元:[^%&',;=?$\x22]+ 12 禁止輸入含有~的字元:[^~\x22]+ 三、特殊需求表達式 1 Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$ 2 功能變數名稱:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.? 3 InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ 4 手機號碼:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$ 5 電話號碼("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$ 6 國內電話號碼(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7} 7 身份證號(15位、18位數字):^\d{15}|\d{18}$ 8 短身份證號碼(數字、字母x結尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$ 9 帳號是否合法(字母開頭,允許5-16位元組,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 10 密碼(以字母開頭,長度在6~18之間,只能包含字母、數字和下劃線):^[a-zA-Z]\w{5,17}$ 11 強密碼(必須包含大小寫字母和數字的組合,不能使用特殊字元,長度在8-10之間):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$ 12 日期格式:^\d{4}-\d{1,2}-\d{1,2} 13 一年的12個月(01~09和1~12):^(0?[1-9]|1[0-2])$ 14 一個月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$ 15 錢的輸入格式: 16 1.有四種錢的表示形式我們可以接受:"10000.00" 和 "10,000.00", 和沒有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$ 17 2.這表示任意一個不以0開頭的數字,但是,這也意味著一個字元"0"不通過,所以我們採用下麵的形式:^(0|[1-9][0-9]*)$ 18 3.一個0或者一個不以0開頭的數字.我們還可以允許開頭有一個負號:^(0|-?[1-9][0-9]*)$ 19 4.這表示一個0或者一個可能為負的開頭不為0的數字.讓用戶以0開頭好了.把負號的也去掉,因為錢總不能是負的吧.下麵我們要加的是說明可能的小數部分:^[0-9]+(.[0-9]+)?$ 20 5.必須說明的是,小數點後面至少應該有1位數,所以"10."是不通過的,但是 "10" 和 "10.2" 是通過的:^[0-9]+(.[0-9]{2})?$ 21 6.這樣我們規定小數點後面必須有兩位,如果你認為太苛刻了,可以這樣:^[0-9]+(.[0-9]{1,2})?$ 22 7.這樣就允許用戶只寫一位小數.下麵我們該考慮數字中的逗號了,我們可以這樣:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$ 23 8.1到3個數字,後面跟著任意個 逗號+3個數字,逗號成為可選,而不是必須:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$ 24 備註:這就是最終結果了,別忘了"+"可以用"*"替代如果你覺得空字元串也可以接受的話(奇怪,為什麼?)最後,別忘了在用函數時去掉去掉那個反斜杠,一般的錯誤都在這裡 25 xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$ 26 中文字元的正則表達式:[\u4e00-\u9fa5] 27 雙位元組字元:[^\x00-\xff] (包括漢字在內,可以用來計算字元串的長度(一個雙位元組字元長度計2,ASCII字元計1)) 28 空白行的正則表達式:\n\s*\r (可以用來刪除空白行) 29 HTML標記的正則表達式:<(\S*?)[^>]*>.*?|<.*? /> (網上流傳的版本太糟糕,上面這個也僅僅能部分,對於複雜的嵌套標記依舊無能為力) 30 首尾空白字元的正則表達式:^\s*|\s*$或(^\s*)|(\s*$) (可以用來刪除行首行尾的空白字元(包括空格、製表符、換頁符等等),非常有用的表達式) 31 騰訊QQ號:[1-9][0-9]{4,} (騰訊QQ號從10000開始) 32 中國郵政編碼:[1-9]\d{5}(?!\d) (中國郵政編碼為6位數字) 33 IP地址:\d+\.\d+\.\d+\.\d+ (提取IP地址時有用) 34 IP地址:((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)) (由@飛龍三少 提供,感謝共用) java 正則表達式的使用 java.util.regex 包主要包括以下三個類: - Pattern 類: pattern 對象是一個正則表達式的編譯表示。Pattern 類沒有公共構造方法。要創建一個 Pattern 對象,你必須首先調用其公共靜態編譯方法,它返回一個 Pattern 對象。該方法接受一個正則表達式作為它的第一個參數。 Matcher 類: Matcher 對象是對輸入字元串進行解釋和匹配操作的引擎。與Pattern 類一樣,Matcher 也沒有公共構造方法。你需要調用 Pattern 對象的 matcher 方法來獲得一個 Matcher 對象。 PatternSyntaxException: PatternSyntaxException 是一個非強制異常類,它表示一個正則表達式模式中的語法錯誤。 以下實例中使用了正則表達式 .runoob. 用於查找字元串中是否包了 runoob 子串: 實例 import java.util.regex.*; class RegexExample1{ public static void main(String args[]){ String content = "I am noob " + "from runoob.com."; String pattern = ".*runoob.*"; boolean isMatch = Pattern.matches(pattern, content); System.out.println("字元串中是否包含了 'runoob' 子字元串? " + isMatch); } } 實例輸出結果為: 字元串中是否包含了 'runoob' 子字元串? true 1 RexUtils checkIdCard(String idCard) 驗證身份證號碼 checkMobile(String mobile) 驗證手機號碼(支持國際格式,+86135xxxx…(中國內地),+00852137xxxx…(中國香港)) boolean checkPhone(String phone) checkEmail 檢驗是否是電子郵箱。格式是數字,字母,下劃線,但不含有 -。 checkDigit 驗證是否是整數 checkDecimals 驗證整數和浮點數 checkBlankSpace 檢驗是否是空白字元 checkChinese 檢驗是否是中文 checkBirthday 驗證日期(日期,格式:1992-09-03,或1992.09.03) 驗證 URL 地址 格式:http://blog.csdn.net/gdutxiaoxu/article/details/71732642或 http://www.csdn.net:80 checkIpAddress 匹配 IP 地址 phoneNoHide 手機號碼,中間4位星號替換 cardIdHide 銀行卡號,保留最後4位,其他星號替換 RexUtisl 工具類源碼 /** * 正則工具類-http://blog.csdn.net/xyang81/article/details/7706408 * 提供驗證郵箱、手機號、電話號碼、身份證號碼、數字等方法 */ public final class RegexUtil { /** * 手機號碼,中間4位星號替換 * * @param phone 手機號 * @return 星號替換的手機號 */ public static String phoneNoHide(String phone) { // 括弧表示組,被替換的部分$n表示第n組的內容 // 正則表達式中,替換字元串,括弧的意思是分組,在replace()方法中, // 參數二中可以使用$n(n為數字)來依次引用模式串中用括弧定義的字串。 // "(\d{3})\d{4}(\d{4})", "$1****$2"的這個意思就是用括弧, // 分為(前3個數字)中間4個數字(最後4個數字)替換為(第一組數值,保持不變$1)(中間為*)(第二組數值,保持不變$2) return phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"); } /** * 銀行卡號,保留最後4位,其他星號替換 * * @param cardId 卡號 * @return 星號替換的銀行卡號 */ public static String cardIdHide(String cardId) { return cardId.replaceAll("\\d{15}(\\d{3})", "**** **** **** **** $1"); } /** * 身份證號,中間10位星號替換 * * @param id 身份證號 * @return 星號替換的身份證號 */ public static String idHide(String id) { return id.replaceAll("(\\d{4})\\d{10}(\\d{4})", "$1** **** ****$2"); } /** * 是否為車牌號(滬A88888) * * @param vehicleNo 車牌號 * @return 是否為車牌號 */ public static boolean checkVehicleNo(String vehicleNo) { Pattern pattern = Pattern.compile("^[\u4e00-\u9fa5]{1}[a-zA-Z]{1}[a-zA-Z_0-9]{5}$"); return pattern.matcher(vehicleNo).find(); } /** * 驗證身份證號碼 * * @param idCard 居民身份證號碼15位或18位,最後一位可能是數字或字母 * @return 驗證成功返回true,驗證失敗返回false */ public static boolean checkIdCard(String idCard) { String regex = "[1-9]\\d{13,16}[a-zA-Z0-9]{1}"; return Pattern.matches(regex, idCard); } /** * 驗證手機號碼(支持國際格式,+86135xxxx...(中國內地),+00852137xxxx...(中國香港)) * * @param mobile 移動、聯通、電信運營商的號碼段 *
移動的號段:134(0-8)、135、136、137、138、139、147(預計用於TD上網卡) * 、150、151、152、157(TD專用)、158、159、187(未啟用)、188(TD專用)
*聯通的號段:130、131、132、155、156(世界風專用)、185(未啟用)、186(3g)
*電信的號段:133、153、180(未啟用)、189
* @return 驗證成功返回true,驗證失敗返回false */ public static boolean checkMobile(String mobile) { String regex = "(\\+\\d+)?1[3458]\\d{9}$"; return Pattern.matches(regex, mobile); } /** * 驗證固定電話號碼 * * @param phone 電話號碼,格式:國家(地區)電話代碼 + 區號(城市代碼) + 電話號碼,如:+8602085588447 *國家(地區) 代碼 :標識電話號碼的國家(地區)的標準國家(地區)代碼。它包含從 0 到 9 的一位或多位數字, * 數字之後是空格分隔的國家(地區)代碼。
*區號(城市代碼):這可能包含一個或多個從 0 到 9 的數字,地區或城市代碼放在圓括弧—— * 對不使用地區或城市代碼的國家(地區),則省略該組件。
*電話號碼:這包含從 0 到 9 的一個或多個數字
* @return 驗證成功返回true,驗證失敗返回false */ public static boolean checkPhone(String phone) { String regex = "(\\+\\d+)?(\\d{3,4}\\-?)?\\d{7,8}$"; return Pattern.matches(regex, phone); } /** * 驗證Email * * @param email email地址,格式:[email protected],[email protected],xxx代表郵件服務商 * @return 驗證成功返回true,驗證失敗返回false */ public static boolean checkEmail(String email) { String regex = "\\w+@\\w+\\.[a-z]+(\\.[a-z]+)?"; return Pattern.matches(regex, email); } /** * 驗證整數(正整數和負整數) * * @param digit 一位或多位0-9之間的整數 * @return 驗證成功返回true,驗證失敗返回false */ public static boolean checkDigit(String digit) { String regex = "\\-?[1-9]\\d+"; return Pattern.matches(regex, digit); } /** * 驗證整數和浮點數(正負整數和正負浮點數) * * @param decimals 一位或多位0-9之間的浮點數,如:1.23,233.30 * @return 驗證成功返回true,驗證失敗返回false */ public static boolean checkDecimals(String decimals) { String regex = "\\-?[1-9]\\d+(\\.\\d+)?"; return Pattern.matches(regex, decimals); } /** * 驗證空白字元 * * @param blankSpace 空白字元,包括:空格、\t、\n、\r、\f、\x0B * @return 驗證成功返回true,驗證失敗返回false */ public static boolean checkBlankSpace(String blankSpace) { String regex = "\\s+"; return Pattern.matches(regex, blankSpace); } /** * 驗證中文 * * @param chinese 中文字元 * @return 驗證成功返回true,驗證失敗返回false */ public static boolean checkChinese(String chinese) { String regex = "^[\u4E00-\u9FA5]+$"; return Pattern.matches(regex, chinese); } /** * 驗證日期(年月日) * * @param birthday 日期,格式:1992-09-03,或1992.09.03 * @return 驗證成功返回true,驗證失敗返回false */ public static boolean checkBirthday(String birthday) { String regex = "[1-9]{4}([-./])\\d{1,2}\\1\\d{1,2}"; return Pattern.matches(regex, birthday); } /** * 驗證URL地址 * * @param url 格式:http://blog.csdn.net/gdutxiaoxu/article/details/71732642或 http://www.csdn.net:80 * @return 驗證成功返回true,驗證失敗返回false */ public static boolean checkURL(String url) { String regex = "(https?://(w{3}\\.)?)?\\w+\\.\\w+(\\.[a-zA-Z]+)*(:\\d{1,5})?(/\\w*)*(\\??(.+=.*)?(&.+=.*)?)?"; return Pattern.matches(regex, url); } /** * 匹配中國郵政編碼 * * @param postcode 郵政編碼 * @return 驗證成功返回true,驗證失敗返回false */ public static boolean checkPostcode(String postcode) { String regex = "[1-9]\\d{5}"; return Pattern.matches(regex, postcode); } /** * 匹配IP地址(簡單匹配,格式,如:192.168.1.1,127.0.0.1,沒有匹配IP段的大小) * * @param ipAddress IPv4標準地址 * @return 驗證成功返回true,驗證失敗返回false */ public static boolean checkIpAddress(String ipAddress) { String regex = "[1-9](\\d{1,2})?\\.(0|([1-9](\\d{1,2})?))\\.(0|([1-9](\\d{1,2})?))\\.(0|([1-9](\\d{1,2})?))"; return Pattern.matches(regex, ipAddress); } }