解釋:正則表達式,又稱正規表示法、常規表示法(英語:Regular Expression,在代碼中常簡寫爲regex、regexp或RE),計算機科學的一個概念。正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。在不少文本編輯器裏,正則表達式一般被用來檢索、替換那些符合某個模式的文本。 java
規則:「^/規則/$」:^([]{})([]{})([]{})$
正則表達式
i.「^「: 若是在開始則:表示從字符串開始匹配,不然表示相反編輯器
ii.」$「: 匹配到字符串結束spa
iii.「/「:兩個//中間就是匹配規則code
iv.」\「: 轉義字符,將後面的字符表示爲其它的含義。regexp
1)特殊字符 ip
2) 將特殊字符轉化爲字面意義ci
案例:
"\\":表示爲 \ 字符
"\n": 表示換行(這是ascii嗎裏面的特殊字符
"\\n":表示爲 \n 字符
v. 字符:字符串
"a":表示字符a
"ab":表示字符 ab
vi.[]和|:表示或,有一個匹配則成立。it
"a|bccd":將匹配accd和bccd
"[ab]ccd": 將匹配accd和bccd
vii.():分組,一組字符串。在正常使用者方便將字符串分割匹配
(規則):獲取規則匹配的字符串
(?=規則):匹配其後緊接着的字符串
(?!規則):匹配氣候沒有緊接着規則的字符串
viii.限定符:表示個數
"{m,n}":表示m到n之間 "{m,}":至少有m個 "{m}":確認m個 "*":0個或多個,等價{0,} "+":一個或多個,等價{1,} "?":0個或1個,等價{0,1}
ix.元字符(特殊字符):
"." 查找單個字符,除了換行和行結束符。 "\w" 查找單詞字符。 "\W" 查找非單詞字符。 "\d" 查找數字。 "\D" 查找非數字字符。 "\s" 查找空白字符。 "\S" 查找非空白字符。 "\b" 匹配單詞邊界。 "\B" 匹配非單詞邊界。 "\0" 查找 NUL 字符。 格式: "\n" 查找換行符。 "\f" 查找換頁符。 "\r" 查找回車符。 "\t" 查找製表符。 "\v" 查找垂直製表符。 其它 "\xxx" 查找以八進制數 xxx 規定的字符。 "\xdd" 查找以十六進制數 dd 規定的字符。 "\uxxxx"查找以十六進制數 xxxx 規定的 Unicode 字符
java.util.regex.Pattern: 規則類,構成器私有。
java.util.regex.Matcher: 匹配類,直接出結果。
tips:經常使用的直接是String類的matches(String regular)
@Test public void createRegular() { // create pattern、matcher Pattern pattern = Pattern.compile("b*g"); Matcher matcher = pattern.matcher("bg"); System.out.println(matcher.matches()); // true // 直接封裝了pattern和matcher System.out.println(pattern.matches("b*g", "bg")); } @Test public void commonRegular() { /** * @see 表示或的時候都用[] */ System.out.println("abcdefg".matches("a|cbcdefg")); // false System.out.println("abcdefg".matches("abcdef|hg")); // false System.out.println("abcdefg".matches("abcde[f|h]g")); // true } @Test public void specialRegular() { /** * @see java裏面專業字符必須用\\,這個轉化爲/ */ System.out.println("abcdefg".matches("\\w*")); // true // 將()轉義爲本來含義 System.out.println("a(bcdef)g".matches("a\\([\\w]{5}\\)g")); // true // ()?表示:小括號中的字符串無關緊要 System.out.println("abcdefg".matches("a([\\w]{5})?g")); // true System.out.println("ag".matches("a([\\w]{5})?g")); // true } @Test public void teleRegular() { /** * @see 電話、更加詳細的規則須要將其拆分更細 */ System.out.println("18655592458".matches("1[\\d]{10}")); // true System.out.println("18655592458".matches("1[0-9]{10}")); // true System.out.println("1865cc92458".matches("1[\\d]{10}")); // false } @Test public void emailRegular() { /** * @see 郵箱 */ System.out.println("2888asdfa@sina.com".matches("[0-9a-zA-Z]+@([0-9a-zA-Z]+\\.)+[0-9a-zA-Z]+")); // true }