java正則表達式

public final class Patternextends Objectimplements Serializable
 

正則表達式的編譯表示形式。 html

指定爲字符串的正則表達式必須首先被編譯爲此類的實例。而後,可將獲得的模式用於建立 Matcher 對象,依照正則表達式,該對象能夠與任意字符序列匹配。執行匹配所涉及的全部狀態都駐留在匹配器中,因此多個匹配器能夠共享同一模式。 java

所以,典型的調用順序是 git

Pattern p = Pattern.compile("a*b");
 Matcher m = p.matcher("aaaaab");
 boolean b = m.matches();

在僅使用一次正則表達式時,能夠方便地經過此類定義 matches 方法。此方法編譯表達式並在單個調用中將輸入序列與其匹配。語句 正則表達式

boolean b = Pattern.matches("a*b", "aaaaab");
等效於上面的三個語句,儘管對於重複的匹配而言它效率不高,由於它不容許重用已編譯的模式。

此類的實例是不可變的,可供多個併發線程安全使用。Matcher 類的實例用於此目的則不安全。 安全

正則表達式的構造摘要

非捕獲組
構造 匹配
 
字符
x 字符 x
\\ 反斜線字符
\0n 帶有八進制值0的字符 n (0 <= n <= 7)
\0nn 帶有八進制值0的字符 nn (0 <= n <= 7)
\0mnn 帶有八進制值0的字符 mnn(0 <= m <= 三、0 <= n <= 7)
\xhh 帶有十六進制值 0x的字符 hh
\uhhhh 帶有十六進制值 0x的字符 hhhh
\t 製表符 ('\u0009')
\n 新行(換行)符 ('\u000A')
\r 回車符 ('\u000D')
\f 換頁符 ('\u000C')
\a 報警 (bell) 符 ('\u0007')
\e 轉義符 ('\u001B')
\cx 對應於 x 的控制符
 
字符類
[abc] a、b或c(簡單類)
[^abc] 任何字符,除了a、b或c(否認)
[a-zA-Z] a到z或A到Z,兩頭的字母包括在內(範圍)
[a-d[m-p]] a到d或m到p:[a-dm-p](並集)
[a-z&&[def]] d、e或f(交集)
[a-z&&[^bc]] a到z,除了b和c:[ad-z](減去)
[a-z&&[^m-p]] a到z,而非m到p:[a-lq-z](減去)
 
預約義字符類
. 任何字符(與行結束符可能匹配也可能不匹配)
\d 數字:[0-9]
\D 非數字:[^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 單詞字符:[a-zA-Z_0-9]
\W 非單詞字符:[^\w]
 
POSIX 字符類(僅 US-ASCII)
\p{Lower} 小寫字母字符:[a-z]
\p{Upper} 大寫字母字符:[A-Z]
\p{ASCII} 全部 ASCII:[\x00-\x7F]
\p{Alpha} 字母字符:[\p{Lower}\p{Upper}]
\p{Digit} 十進制數字:[0-9]
\p{Alnum} 字母數字字符:[\p{Alpha}\p{Digit}]
\p{Punct} 標點符號:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
\p{Graph} 可見字符:[\p{Alnum}\p{Punct}]
\p{Print} 可打印字符:[\p{Graph}\x20]
\p{Blank} 空格或製表符:[ \t]
\p{Cntrl} 控制字符:[\x00-\x1F\x7F]
\p{XDigit} 十六進制數字:[0-9a-fA-F]
\p{Space} 空白字符:[ \t\n\x0B\f\r]
 
java.lang.Character 類(簡單的 java 字符類型
\p{javaLowerCase} 等效於 java.lang.Character.isLowerCase()
\p{javaUpperCase} 等效於 java.lang.Character.isUpperCase()
\p{javaWhitespace} 等效於 java.lang.Character.isWhitespace()
\p{javaMirrored} 等效於 java.lang.Character.isMirrored()
 
Unicode 塊和類別的類
\p{InGreek} Greek 塊(簡單)中的字符
\p{Lu} 大寫字母(簡單類別
\p{Sc} 貨幣符號
\P{InGreek} 全部字符,Greek 塊中的除外(否認)
[\p{L}&&[^\p{Lu}]]  全部字母,大寫字母除外(減去)
 
邊界匹配器
^ 行的開頭
$ 行的結尾
\b 單詞邊界
\B 非單詞邊界
\A 輸入的開頭
\G 上一個匹配的結尾
\Z 輸入的結尾,僅用於最後的結束符(若是有的話)
\z 輸入的結尾
 
Greedy 數量詞
X? X,一次或一次也沒有
X* X,零次或屢次
X+ X,一次或屢次
X{n} X,剛好 n
X{n,} X,至少 n
X{n,m} X,至少 n 次,可是不超過 m
 
Reluctant 數量詞
X?? X,一次或一次也沒有
X*? X,零次或屢次
X+? X,一次或屢次
X{n}? X,剛好 n
X{n,}? X,至少 n
X{n,m}? X,至少 n 次,可是不超過 m
 
Possessive 數量詞
X?+ X,一次或一次也沒有
X*+ X,零次或屢次
X++ X,一次或屢次
X{n}+ X,剛好 n
X{n,}+ X,至少 n
X{n,m}+ X,至少 n 次,可是不超過 m
 
Logical 運算符
XY X 後跟 Y
X|Y XY
(X) X,做爲捕獲組
 
Back 引用
\n 任何匹配的 nth 捕獲組
 
引用
\ Nothing,可是引用如下字符
\Q Nothing,可是引用全部字符,直到\E
\E Nothing,可是結束從\Q開始的引用
 
特殊構造(非捕獲)
(?:X) X,做爲非捕獲組
(?idmsux-idmsux)  Nothing,可是將匹配標誌i d m s u x on - off
(?idmsux-idmsux:X)   X,做爲帶有給定標誌 i d m s u x on - off
(?=X) X,經過零寬度的正 lookahead
(?!X) X,經過零寬度的負 lookahead
(?<=X) X,經過零寬度的正 lookbehind
(?<!X) X,經過零寬度的負 lookbehind
(?>X) X,做爲獨立的非捕獲組

反斜線、轉義和引用

反斜線字符 ('\') 用於引用轉義構造,如上表所定義的,同時還用於引用其餘將被解釋爲非轉義構造的字符。所以,表達式\\與單個反斜線匹配,而\{與左括號匹配。 併發

在不表示轉義構造的任何字母字符前使用反斜線都是錯誤的;它們是爲未來擴展正則表達式語言保留的。能夠在非字母字符前使用反斜線,無論該字符是否非轉義構造的一部分。 spa

根據 Java Language Specification 的要求,Java 源代碼的字符串中的反斜線被解釋爲 Unicode 轉義或其餘字符轉義。所以必須在字符串字面值中使用兩個反斜線,表示正則表達式受到保護,不被 Java 字節碼編譯器解釋。例如,當解釋爲正則表達式時,字符串字面值"\b"與單個退格字符匹配,而"\\b"與單詞邊界匹配。字符串字面值"\(hello\)"是非法的,將致使編譯時錯誤;要與字符串(hello)匹配,必須使用字符串字面值"\\(hello\\)"。 .net

字符類

字符類能夠出如今其餘字符類中,而且能夠包含並集運算符(隱式)和交集運算符 (&&)。並集運算符表示至少包含其某個操做數類中全部字符的類。交集運算符表示包含同時位於其兩個操做數類中全部字符的類。 線程

字符類運算符的優先級以下所示,按從最高到最低的順序排列: code

1     字面值轉義     \x
2     分組 [...]
3     範圍 a-z
4     並集 [a-e][i-u]
5     交集 [a-z&&[aeiou]]

注意,元字符的不一樣集合實際上位於字符類的內部,而非字符類的外部。例如,正則表達式.在字符類內部就失去了其特殊意義,而表達式-變成了造成元字符的範圍。 





  經常使用的正則表達式:

匹配特定數字: ^[1-9]d*$    //匹配正整數 ^-[1-9]d*$   //匹配負整數 ^-?[1-9]d*$   //匹配整數 ^[1-9]d*|0$  //匹配非負整數(正整數 + 0) ^-[1-9]d*|0$   //匹配非正整數(負整數 + 0) ^[1-9]d*.d*|0.d*[1-9]d*$   //匹配正浮點數 ^-([1-9]d*.d*|0.d*[1-9]d*)$  //匹配負浮點數 ^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$  //匹配浮點數 ^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$   //匹配非負浮點數(正浮點數 + 0) ^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$  //匹配非正浮點數(負浮點數 + 0) 評註:處理大量數據時有用,具體應用時注意修正 匹配特定字符串: ^[A-Za-z]+$  //匹配由26個英文字母組成的字符串 ^[A-Z]+$  //匹配由26個英文字母的大寫組成的字符串 ^[a-z]+$  //匹配由26個英文字母的小寫組成的字符串 ^[A-Za-z0-9]+$  //匹配由數字和26個英文字母組成的字符串 ^w+$  //匹配由數字、26個英文字母或者下劃線組成的字符串 在使用RegularExpressionValidator驗證控件時的驗證功能及其驗證表達式介紹以下: 只能輸入數字:「^[0-9]*$」 只能輸入n位的數字:「^d{n}$」 只能輸入至少n位數字:「^d{n,}$」 只能輸入m-n位的數字:「^d{m,n}$」 只能輸入零和非零開頭的數字:「^(0|[1-9][0-9]*)$」 只能輸入有兩位小數的正實數:「^[0-9]+(.[0-9]{2})?$」 只能輸入有1-3位小數的正實數:「^[0-9]+(.[0-9]{1,3})?$」 只能輸入非零的正整數:「^+?[1-9][0-9]*$」 只能輸入非零的負整數:「^-[1-9][0-9]*$」 只能輸入長度爲3的字符:「^.{3}$」 只能輸入由26個英文字母組成的字符串:「^[A-Za-z]+$」 只能輸入由26個大寫英文字母組成的字符串:「^[A-Z]+$」 只能輸入由26個小寫英文字母組成的字符串:「^[a-z]+$」 只能輸入由數字和26個英文字母組成的字符串:「^[A-Za-z0-9]+$」 只能輸入由數字、26個英文字母或者下劃線組成的字符串:「^w+$」 驗證用戶密碼:「^[a-zA-Z]w{5,17}$」正確格式爲:以字母開頭,長度在6-18之間, 只能包含字符、數字和下劃線。 驗證是否含有^%&’,;=?$」等字符:「[^%&’,;=?$x22]+」 只能輸入漢字:「^[u4e00-u9fa5],{0,}$」 驗證Email地址:「^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$」 驗證InternetURL:「^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$」 驗證電話號碼:「^((d{3,4})|d{3,4}-)?d{7,8}$」 正確格式爲:「XXXX-XXXXXXX」,「XXXX-XXXXXXXX」,「XXX-XXXXXXX」, 「XXX-XXXXXXXX」,「XXXXXXX」,「XXXXXXXX」。 驗證身份證號(15位或18位數字):「^d{15}|d{}18$」 驗證一年的12個月:「^(0?[1-9]|1[0-2])$」正確格式爲:「01」-「09」和「1」「12」 驗證一個月的31天:「^((0?[1-9])|((1|2)[0-9])|30|31)$」 正確格式爲:「01」「09」和「1」「31」。 匹配中文字符的正則表達式: [u4e00-u9fa5] 匹配雙字節字符(包括漢字在內):[^x00-xff] 匹配空行的正則表達式:n[s| ]*r 匹配HTML標記的正則表達式:/< (.*)>.*|< (.*) />/ 匹配首尾空格的正則表達式:(^s*)|(s*$) 匹配Email地址的正則表達式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)* 匹配網址URL的正則表達式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?

相關文章
相關標籤/搜索