java正则表达式的语法详解及常用方法
一、實例:
今天在實現一個功能時遇到了這樣一個問題,及接口傳過來一個字符串,我需要判斷它是一個區間還是一段文字并對其做分別處理。這里面的問題就在于我怎么去判斷區間,按照數學規律區間可分為以下幾種情況:(-∞,+∞),(-∞,M),(-∞,M],(N,+∞),[N,+∞),(N,M),[N,M],(-∞,-N),(-∞,-N],(-N,+∞),[-N,+∞),(-N,-M),[-N,-M]。
怎樣把這里的所有情況考慮進來就成了問題的關鍵。
首先找一下這些區間的共性,咱們可以把區間按位置分為0,1,2,3四個位置進行分析。
| 0號位置 | “[“或者”(” |
| 1號位置 | “-∞” ,“+∞”,“N”,,“-N” |
| 2號位置 | “,” |
| 3號位置 | “-∞” ,“+∞”,“M”,,“-M” |
| 4號位置 | “]“或者”)” |
有以上分析可知:
| 0號位置 | “\[” 或者 “\(” |
| 1號位置 | “\-?([0-9]) +” 或者 “\-∞” 或者 “\+∞” |
| 2號位置 | “,” |
| 3號位置 | “\-?([0-9]) +” 或者 “\-∞” 或者 “\+∞” |
| 4號位置 | “\]” 或者 “\)” |
綜上所述就得到了滿足需求的正則表達式:
"([\\[\\(]{1})(\\-?([0-9])+|\\-∞|\\+∞),(\\-?([0-9])+|\\-∞|\\+∞)([\\]\\)]{1})"注:在idea編譯器中轉義字符“\”需要寫成“\\”才能生效。
String thresholdSection = raIndexThreshold.getThresholdSection().trim();if (Pattern.matches("([\\[\\(]{1})(\\-?([0-9])+|\\-∞|\\+∞),(\\-?([0-9])+|\\-∞|\\+∞)([\\]\\)]{1})", thresholdSection) ) {String start = thresholdSection.substring(0, 1);String end = thresholdSection.substring(thresholdSection.length() - 1);String substring2 = thresholdSection.substring(1, thresholdSection.length() - 1);String[] split = substring2.split(",");List<String> list = Arrays.asList(split);String startValue = list.get(0);String endValue = list.get(1);}二、正則表達式語法:
| \ | 將下一字符標記為特殊字符、文本、反向引用或八進制轉義符。例如,“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 | 匹配 x 或 y。例如,‘z|food’ 匹配"z"或"food"。(z|f)ood 匹配"zood"或"food"。 |
| [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 匹配版權符號 (?)。 |
三、Pattern類與Matcher類詳解
java.util.regex是一個用正則表達式所訂制的模式來對字符串進行匹配工作的類庫包。它包括兩個類:Pattern和Matcher Pattern 一個Pattern是一個正則表達式經編譯后的表現模式。 Matcher 一個Matcher對象是一個狀態機器,它依據Pattern對象做為匹配模式對字符串展開匹配檢查。 首先一個Pattern實例訂制了一個所用語法與PERL的類似的正則表達式經編譯后的模式,然后一個Matcher實例在這個給定的Pattern實例的模式控制下進行字符串的匹配工作。以下我們就分別來看看這兩個類:
捕獲組的概念
捕獲組可以通過從左到右計算其開括號來編號,編號是從1 開始的。例如,在表達式 ((A)(B?))中,存在四個這樣的組:
((A)(B(C))) (A) (B(C)) (C)組零始終代表整個表達式。 以 (?) 開頭的組是純的非捕獲 組,它不捕獲文本,也不針對組合計進行計數。
與組關聯的捕獲輸入始終是與組最近匹配的子序列。如果由于量化的緣故再次計算了組,則在第二次計算失敗時將保留其以前捕獲的值(如果有的話)例如,將字符串"aba" 與表達式(a(b)?)+ 相匹配,會將第二組設置為 “b”。在每個匹配的開頭,所有捕獲的輸入都會被丟棄。
詳解Pattern類和Matcher類
java正則表達式通過java.util.regex包下的Pattern類與Matcher類實現(建議在閱讀本文時,打開java API文檔,當介紹到哪個方法時,查看java API中的方法說明,效果會更佳).
Pattern類用于創建一個正則表達式,也可以說創建一個匹配模式,它的構造方法是私有的,不可以直接創建,但可以通過Pattern.complie(String regex)簡單工廠方法創建一個正則表達式,
pattern() 返回正則表達式的字符串形式,其實就是返回Pattern.complile(String regex)的regex參數
1.Pattern.split(CharSequence input)
Pattern有一個split(CharSequence input)方法,用于分隔字符串,并返回一個String[],我猜String.split(String regex)就是通過Pattern.split(CharSequence input)來實現的.
Pattern p=Pattern.compile(“\d+”);
String[] str=p.split(“我的QQ是:456456我的電話是:0532214我的郵箱是:aaa@aaa.com”);
結果:str[0]=“我的QQ是:” str[1]=“我的電話是:” str[2]=“我的郵箱是:aaa@aaa.com”
2.Pattern.matcher(String regex,CharSequence input)是一個靜態方法,用于快速匹配字符串,該方法適合用于只匹配一次,且匹配全部字符串.
Pattern.matches("\\d+","2223");//返回true Pattern.matches("\\d+","2223aa");//返回false,需要匹配到所有字符串才能返回true,這里aa不能匹配到 Pattern.matches("\\d+","22bb23");//返回false,需要匹配到所有字符串才能返回true,這里bb不能匹配到3.Pattern.matcher(CharSequence input)
說了這么多,終于輪到Matcher類登場了,Pattern.matcher(CharSequence input)返回一個Matcher對象.Matcher類的構造方法也是私有的,不能隨意創建,只能通過Pattern.matcher(CharSequence input)方法得到該類的實例. Pattern類只能做一些簡單的匹配操作,要想得到更強更便捷的正則匹配操作,那就需要將Pattern與Matcher一起合作.Matcher類提供了對正則表達式的分組支持,以及對正則表達式的多次匹配支持. Pattern p=Pattern.compile("\\d+"); Matcher m=p.matcher("22bb23"); m.pattern();//返回p 也就是返回該Matcher對象是由哪個Pattern對象的創建的4.Matcher.matches()/ Matcher.lookingAt()/ Matcher.find()
Matcher類提供三個匹配操作方法,三個方法均返回boolean類型,當匹配到時返回true,沒匹配到則返回false
matches()對整個字符串進行匹配,只有整個字符串都匹配了才返回true
我們現在回頭看一下Pattern.matcher(String regex,CharSequence input),它與下面這段代碼等價
Pattern.compile(regex).matcher(input).matches()
lookingAt()對前面的字符串進行匹配,只有匹配到的字符串在最前面才返回true
5.Mathcer.start()/ Matcher.end()/ Matcher.group()
當使用matches(),lookingAt(),find()執行匹配操作后,就可以利用以上三個方法得到更詳細的信息.
start()返回匹配到的子字符串在字符串中的索引位置.
end()返回匹配到的子字符串的最后一個字符在字符串中的索引位置.
group()返回匹配到的子字符串
start(),end(),group()均有一個重載方法它們是start(int i),end(int i),group(int i)專用于分組操作,Mathcer類還有一個groupCount()用于返回有多少組.
Pattern p=Pattern.compile("([a-z]+)(\\d+)"); Matcher m=p.matcher("aaa2223bb"); m.find(); //匹配aaa2223 m.groupCount(); //返回2,因為有2組 m.start(1); //返回0 返回第一組匹配到的子字符串在字符串中的索引號 m.start(2); //返回3 m.end(1); //返回3 返回第一組匹配到的子字符串的最后一個字符在字符串中的索引位置. m.end(2); //返回7 m.group(1); //返回aaa,返回第一組匹配到的子字符串 m.group(2); //返回2223,返回第二組匹配到的子字符串現在我們使用一下稍微高級點的正則匹配操作,例如有一段文本,里面有很多數字,而且這些數字是分開的,我們現在要將文本中所有數字都取出來,利用java的正則操作是那么的簡單.
Pattern p=Pattern.compile("\\d+"); Matcher m=p.matcher("我的QQ是:456456 我的電話是:0532214 我的郵箱是:aaa123@aaa.com"); while(m.find()) { System.out.println(m.group()); } //輸出: 456456 0532214 123//如將以上while()循環替換成
while(m.find()) { System.out.println(m.group()); System.out.print("start:"+m.start()); System.out.println(" end:"+m.end()); } //則輸出: 456456 start:6 end:12 0532214 start:19 end:26 123 start:36 end:39 現在大家應該知道,每次執行匹配操作后start(),end(),group()三個方法的值都會改變,改變成匹配到的子字符串的信息,以及它們的重載方法,也會改變成相應的信息. 注意:只有當匹配操作成功,才可以使用start(),end(),group()三個方法,否則會拋出java.lang.IllegalStateException,也就是當matches(),lookingAt(),find()其中任意一個方法返回true時,才可以使用.三、常用的正則表達式:
(1) “^\d+$” //非負整數(正整數 + 0)
(2) “1[1-9][0-9]$” //正整數
(3) “^((-\d+)|(0+))$” //非正整數(負整數 + 0)
(4) “^-[0-9][1-9][0-9]$” //負整數
(5) “^-?\d+$” //整數
(6) “^\d+(.\d+)?$” //非負浮點數(正浮點數 + 0)
(7) “^(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$” //正浮點數
(8) “^((-\d+(.\d+)?)|(0+(.0+)?))$” //非正浮點數(負浮點數 + 0)
(9) “^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$” //負浮點數
(10) “^(-?\d+)(.\d+)?$” //浮點數
(11) “^[A-Za-z]+$” //由26個英文字母組成的字符串
(12) “^[A-Z]+$” //由26個英文字母的大寫組成的字符串
(13) “^[a-z]+$” //由26個英文字母的小寫組成的字符串
(14) “^[A-Za-z0-9]+$” //由數字和26個英文字母組成的字符串
(15) “^\w+$” //由數字、26個英文字母或者下劃線組成的字符串
(16) “^[\w-]+(.[\w-]+)*@[\w-]+(.[\w-]+)+$” //email地址
(17) “^[a-zA-z]+://(\w+(-\w+))(.(\w+(-\w+)))(?\S)?$” //url
(18) /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-((0-2)|(3[0|1]))$/ // 年-月-日
(19) /^((0([1-9]{1}))|(1[1|2]))/((0-2)|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年
(20) “^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$” //Emil
(21) /^((+?[0-9]{2,4}-[0-9]{3,4}-)|([0-9]{3,4}-))?([0-9]{7,8})(-[0-9]+)?$/ //電話號碼
(22) “^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$” //IP地址
(23)
(24) 匹配中文字符的正則表達式: [\u4e00-\u9fa5]
(25) 匹配雙字節字符(包括漢字在內):[^\x00-\xff]
(26) 匹配空行的正則表達式:\n[\s| ]*\r
(27) 匹配HTML標記的正則表達式:/<(.)>.</\1>|<(.*) />/
(28) 匹配首尾空格的正則表達式:(^\s*)|(\s*$)
(29) 匹配Email地址的正則表達式:\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*
(30) 匹配網址URL的正則表達式:2+://(\w+(-\w+))(\.(\w+(-\w+)))(\?\S)?$
(31) 匹配帳號是否合法(字母開頭,允許5-16字節,允許字母數字下劃線):3[a-zA-Z0-9_]{4,15}$
(32) 匹配國內電話號碼:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?
(33) 匹配騰訊QQ號:4[1-9][0-9]$
(34) 元字符及其在正則表達式上下文中的行為:
(35) \ 將下一個字符標記為一個特殊字符、或一個原義字符、或一個后向引用、或一個八進制轉義符。
(36) ^ 匹配輸入字符串的開始位置。如果設置了 RegExp 對象的Multiline 屬性,^ 也匹配 ’\n’ 或 ’\r’ 之后的位置。
(37) $ 匹配輸入字符串的結束位置。如果設置了 RegExp 對象的Multiline 屬性,$ 也匹配 ’\n’ 或 ’\r’ 之前的位置。
(38) * 匹配前面的子表達式零次或多次。
(39) + 匹配前面的子表達式一次或多次。+ 等價于 {1,}。
(40) ? 匹配前面的子表達式零次或一次。? 等價于 {0,1}。
(41) {n} n 是一個非負整數,匹配確定的n 次。
(42) {n,} n 是一個非負整數,至少匹配n 次。
(43) {n,m} m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。在逗號和兩個數之間不能有空格。
(44) ? 當該字符緊跟在任何一個其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面時,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認的貪婪模式則盡可能多的匹配所搜索的字符串。
(45) . 匹配除 “\n” 之外的任何單個字符。要匹配包括 ’\n’ 在內的任何字符,請使用象 ’[.\n]’ 的模式。
(46) (pattern) 匹配pattern 并獲取這一匹配。
(47) (?:pattern) 匹配pattern 但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲供以后使用。
(48) (?=pattern) 正向預查,在任何匹配 pattern 的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以后使用。
(49) (?!pattern) 負向預查,與(?=pattern)作用相反
(50) x|y 匹配 x 或 y。
(51) [xyz] 字符集合。
(52) [^xyz] 負值字符集合。
(53) [a-z] 字符范圍,匹配指定范圍內的任意字符。
(54) [^a-z] 負值字符范圍,匹配任何不在指定范圍內的任意字符。
(55) \b 匹配一個單詞邊界,也就是指單詞和空格間的位置。
(56) \B 匹配非單詞邊界。
(57) \cx 匹配由x指明的控制字符。
(58) \d 匹配一個數字字符。等價于 [0-9]。
(59) \D 匹配一個非數字字符。等價于 [^0-9]。
(60) \f 匹配一個換頁符。等價于 \x0c 和 \cL。
(61) \n 匹配一個換行符。等價于 \x0a 和 \cJ。
(62) \r 匹配一個回車符。等價于 \x0d 和 \cM。
(63) \s 匹配任何空白字符,包括空格、制表符、換頁符等等。等價于[ \f\n\r\t\v]。
(64) \S 匹配任何非空白字符。等價于 [^ \f\n\r\t\v]。
(65) \t 匹配一個制表符。等價于 \x09 和 \cI。
(66) \v 匹配一個垂直制表符。等價于 \x0b 和 \cK。
(67) \w 匹配包括下劃線的任何單詞字符。等價于’[A-Za-z0-9_]’。
(68) \W 匹配任何非單詞字符。等價于 ’[^A-Za-z0-9_]’。
(69) \xn 匹配 n,其中 n 為十六進制轉義值。十六進制轉義值必須為確定的兩個數字長。
(70) \num 匹配 num,其中num是一個正整數。對所獲取的匹配的引用。
(71) \n 標識一個八進制轉義值或一個后向引用。如果 \n 之前至少 n 個獲取的子表達式,則 n 為后向引用。否則,如果 n 為八進制數字 (0-7),則 n 為一個八進制轉義值。
(72) \nm 標識一個八進制轉義值或一個后向引用。如果 \nm 之前至少有is preceded by at least nm 個獲取得子表達式,則 nm 為后向引用。如果 \nm 之前至少有 n 個獲取,則 n 為一個后跟文字 m 的后向引用。如果前面的條件都不滿足,若 n 和 m 均為八進制數字 (0-7),則 \nm 將匹配八進制轉義值 nm。
(73) \nml 如果 n 為八進制數字 (0-3),且 m 和 l 均為八進制數字 (0-7),則匹配八進制轉義值 nml。
(74) \un 匹配 n,其中 n 是一個用四個十六進制數字表示的Unicode字符。
(75) 匹配中文字符的正則表達式: [u4e00-u9fa5]
(76) 匹配雙字節字符(包括漢字在內):[^x00-xff]
(77) 匹配空行的正則表達式:n[s| ]*r
(78) 匹配HTML標記的正則表達式:/<(.)>.</1>|<(.*) />/
(79) 匹配首尾空格的正則表達式:(^s*)|(s*$)
(80) 匹配Email地址的正則表達式:w+([-+.]w+)@w+([-.]w+).w+([-.]w+)*
(81) 匹配網址URL的正則表達式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?
(82) 利用正則表達式限制網頁表單里的文本框輸入內容:
(83) 用正則表達式限制只能輸入中文:οnkeyup=“value=value.replace(/[^u4E00-u9FA5]/g,‘’)” onbeforepaste=“clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^u4E00-u9FA5]/g,‘’))”
(84) 用正則表達式限制只能輸入全角字符: οnkeyup=“value=value.replace(/[^uFF00-uFFFF]/g,‘’)” onbeforepaste=“clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^uFF00-uFFFF]/g,‘’))”
(85) 用正則表達式限制只能輸入數字:οnkeyup="value=value.replace(/[^d]/g,‘’) "onbeforepaste=“clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^d]/g,‘’))”
(86) 用正則表達式限制只能輸入數字和英文:οnkeyup="value=value.replace(/[W]/g,‘’) "onbeforepaste=“clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^d]/g,‘’))”
(87) 整理:
(88) 匹配中文字符的正則表達式: [\u4e00-\u9fa5]
(89) 匹配雙字節字符(包括漢字在內):[^\x00-\xff]
(90) 匹配空行的正則表達式:\n[\s| ]*\r
(91) 匹配HTML標記的正則表達式:/<(.)>.</\1>|<(.*) />/
(92) 匹配首尾空格的正則表達式:(^\s*)|(\s*$)
(93) 匹配IP地址的正則表達式:/(\d+).(\d+).(\d+).(\d+)/g //
(94) 匹配Email地址的正則表達式:\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*
(95) 匹配網址URL的正則表達式:http://(/[\w-]+.)+[\w-]+(/[\w- ./?%&=]*)?
(96) sql語句:^(select|drop|delete|create|update|insert).*$
(97) 非負整數:^\d+$
(98) 正整數:^[0-9][1-9][0-9]$
(99) 非正整數:^((-\d+)|(0+))$
(100) 負整數:^-[0-9][1-9][0-9]$
(101) 整數:^-?\d+$
(102) 非負浮點數:^\d+(.\d+)?$
(103) 正浮點數:^((0-9)+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$
(104) 非正浮點數:^((-\d+.\d+)?)|(0+(.0+)?))$
(105) 負浮點數:^(-((正浮點數正則式)))$
(106) 英文字符串:^[A-Za-z]+$
(107) 英文大寫串:^[A-Z]+$
(108) 英文小寫串:^[a-z]+$
(109) 英文字符數字串:^[A-Za-z0-9]+$
(110) 英數字加下劃線串:^\w+$
(111) E-mail地址:^[\w-]+(.[\w-]+)*@[\w-]+(.[\w-]+)+$
(112) URL:^[a-zA-Z]+://(\w+(-\w+))(.(\w+(-\w+)))(?\s)?$
或:^http://[A-Za-z0-9]+.[A-Za-z0-9]+[/=?%-&_~`@[]':+!]([^<>“”])$
(113) 郵政編碼:^[1-9]\d{5}$
(114) 中文:^[\u0391-\uFFE5]+$
(115) 電話號碼:^((\d2,3\d2,3)|(\d{3}-))?(0\d2,30\d2,3|0\d{2,3}-)?[1-9]\d{6,7}(-\d{1,4})?$
(116) 手機號碼:^((\d2,3\d2,3)|(\d{3}-))?13\d{9}$
(117) 雙字節字符(包括漢字在內):^\x00-\xff
(118) 匹配首尾空格:(^\s*)|(\s*$)(像vbscript那樣的trim函數)
(119) 匹配HTML標記:<(.)>.</\1>|<(.*) />
(120) 匹配空行:\n[\s| ]*\r
(121) 提取信息中的網絡鏈接:(h|H)(r|R)(e|E)(f|F) *= *(‘|")?(\w|\|/|.)+(’|"| *|>)?
(122) 提取信息中的郵件地址:\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*
(123) 提取信息中的圖片鏈接:(s|S)(r|R)(c|C) *= *(‘|")?(\w|\|/|.)+(’|"| *|>)?
(124) 提取信息中的IP地址:(\d+).(\d+).(\d+).(\d+)
(125) 提取信息中的中國手機號碼:(86)013\d{9}
(126) 提取信息中的中國固定電話號碼:(\d3,4\d3,4|\d{3,4}-|\s)?\d{8}
(127) 提取信息中的中國電話號碼(包括移動和固定電話):(\d3,4\d3,4|\d{3,4}-|\s)?\d{7,14}
(128) 提取信息中的中國郵政編碼:[1-9]{1}(\d+){5}
(129) 提取信息中的浮點數(即小數):(-?\d*).?\d+
(130) 提取信息中的任何數字 :(-?\d*)(.\d+)?
(131) IP:(\d+).(\d+).(\d+).(\d+)
(132) 電話區號:/^0\d{2,3}$/
(133) 騰訊QQ號:^[1-9][1-9][0-9]$
(134) 帳號(字母開頭,允許5-16字節,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
(135) 中文、英文、數字及下劃線:^[\u4e00-\u9fa5_a-zA-Z0-9]+$
0-9 ??
a-zA-z ??
a-zA-Z ??
1-9 ??
總結
以上是生活随笔為你收集整理的java正则表达式的语法详解及常用方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 修复Cydia红字 flAbsPath
- 下一篇: JAVA 移位