JAVA基礎之正則表達式

JAVA基礎之正則表達式

一.概述

    1.1 簡述

         解釋:正則表達式,又稱正規表示法、常規表示法(英語:Regular Expression,在代碼中常簡寫爲regex、regexp或RE),計算機科學的一個概念。正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。在不少文本編輯器裏,正則表達式一般被用來檢索、替換那些符合某個模式的文本。 java

    1.2 規則詳解

       規則:「^/規則/$」:^([]{})([]{})([]{})$
正則表達式

                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 字符


二.案例

    2.1 Java中的正則依賴的類

        java.util.regex.Pattern: 規則類,構成器私有。

        java.util.regex.Matcher: 匹配類,直接出結果。

        tips:經常使用的直接是String類的matches(String regular)

    2.2 使用

@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
	}
相關文章
相關標籤/搜索