日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

java常用類庫-正則表達(dá)式【1】

系統(tǒng) 3519 0

正則表達(dá)式

1、 正則表達(dá)式可以方便的對(duì)數(shù)據(jù)進(jìn)行匹配,可以執(zhí)行更加復(fù)雜的字符串驗(yàn)證、拆分、替換功能等。

Eg :現(xiàn)在判斷一個(gè)字符串是不是由數(shù)字組成?

A :不使用正則表達(dá)式

    public class RegexDemo01 {

	/**
	 * @param args
	 */

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str = "1234567890";//此字符串由數(shù)字組成
		boolean flag = true;//定義標(biāo)志變量
		//不使用正則的基本思路是:將字符串轉(zhuǎn)換為字符數(shù)組,之后再依次進(jìn)行判斷
		char[] c = str.toCharArray();//將字符串轉(zhuǎn)換為字符數(shù)組
		for(int i=0;i<c.length;i++){
			if(c[i]<'0' || c[i]>'9'){ //如果滿足條件,說明不是由數(shù)字組成
				flag = false;
				break;
			}
		}
		if(flag){
			System.out.println("yes!由數(shù)字組成");
		}else{
			System.out.println("不是由數(shù)字組成!");
		}
		
	}

}

  


運(yùn)行結(jié)果截圖:

java常用類庫-正則表達(dá)式【1】

問題:基本思路是將字符串拆分為字符數(shù)字之后,一個(gè)個(gè)進(jìn)行驗(yàn)證,如果遇到更加復(fù)雜的情況呢?

B 使用正則表達(dá)式

    import java.util.regex.Pattern;


public class RegexDemo02 {

	/**
	 * @param args
	 */

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str = "1234567890";
		if(Pattern.compile("[0-9]+").matcher(str).matches()){ //使用正則表達(dá)式
			System.out.println("是由數(shù)字組成!");
		}else{
			System.out.println("不是由數(shù)字組成!");
		}
	}

}

  


運(yùn)行結(jié)果截圖:

java常用類庫-正則表達(dá)式【1】

2、 正則: Pattern 類、 Matcher

正則的兩個(gè)核心操作類:

    
      
        
          A
        
          public final class 
          
            Matcher
          
          extends 
          
            
              Object
            
          
           implements 
          
            
              MatchResult
            
          
        
      
    
  
    
      
      
    
  
    
      
        B: public final class 
        
          Pattern
        
         extends 
      
      
        
          Object
        
      
      
         implements 
      
      
        
          Serializable
        
      
    
  
    
      
      
    
  

3、正則表達(dá)式的編譯表示形式

指定為字符串的正則表達(dá)式必須首先被編譯為此類的實(shí)例。然后,可將得到的模式用于創(chuàng)建 Matcher 對(duì)象,依照正則表達(dá)式,該對(duì)象可以與任意 字符序列 匹配。執(zhí)行匹配所涉及的所有狀態(tài)都駐留在匹配器中,所以多個(gè)匹配器可以共享同一模式。

因此,典型的調(diào)用順序是

Pattern p = Pattern. compile ("a*b");

Matcher m = p. matcher ("aaaaab");

boolean b = m. matches ();

在僅使用一次正則表達(dá)式時(shí),可以方便地通過此類定義 matches 方法。此方法編譯表達(dá)式并在單個(gè)調(diào)用中將輸入序列與其匹配。語句

boolean b = Pattern.matches("a*b", "aaaaab");

等效于上面的三個(gè)語句,盡管對(duì)于重復(fù)的匹配而言它效率不高,因?yàn)樗辉试S重用已編譯的模式。

此類的實(shí)例是不可變的,可供多個(gè)并發(fā)線程安全使用。 Matcher 類的實(shí)例用于此目的則不安全。

    
    
  

1、 常用的正則規(guī)則:

構(gòu)造

匹配

字符

x

字符 x

\\

反斜線字符

\0 n

帶有八進(jìn)制值 0 的字符 n (0<= n <=7)

\0 nn

帶有八進(jìn)制值 0 的字符 nn (0<= n <=7)

\0 mnn

帶有八進(jìn)制值 0 的字符 mnn (0<= m <=3、0<= n <=7)

\x hh

帶有十六進(jìn)制值0x 的字符 hh

\u hhhh

帶有十六進(jìn)制值0x 的字符 hhhh

\t

制表符 ('\u0009')

\n

新行(換行)符 ('\u000A')

\r

回車符 ('\u000D')

\f

換頁符 ('\u000C')

\a

報(bào)警 (bell) 符 ('\u0007')

\e

轉(zhuǎn)義符 ('\u001B')

\c x

對(duì)應(yīng)于 x 的控制符

字符類

[abc]

a、b 或 c(簡單類)

[^abc]

任何字符,除了 a、b 或 c(否定)

[a-zA-Z]

a 到 z 或 A 到 Z,兩頭的字母包括在內(nèi)(范圍)

[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](減去)

預(yù)定義字符類

.

任何字符(與 行結(jié)束符 可能匹配也可能不匹配)

\d

數(shù)字:[0-9]

\D

非數(shù)字: [^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}

十進(jìn)制數(shù)字:[0-9]

\p{Alnum}

字母數(shù)字字符:[\p{Alpha}\p{Digit}]

\p{Punct}

標(biāo)點(diǎn)符號(hào):!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

\p{Graph}

可見字符:[\p{Alnum}\p{Punct}]

\p{Print}

可打印字符:[\p{Graph}\x20]

\p{Blank}

空格或制表符:[ \t]

\p{Cntrl}

控制字符:[\x00-\x1F\x7F]

\p{XDigit}

十六進(jìn)制數(shù)字:[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}

貨幣符號(hào)

\P{InGreek}

所有字符,Greek 塊中的除外(否定)

[\p{L}&&[^\p{Lu}]]

所有字母,大寫字母除外(減去)

邊界匹配器

^

行的開頭

$

行的結(jié)尾

\b

單詞邊界

\B

非單詞邊界

\A

輸入的開頭

\G

上一個(gè)匹配的結(jié)尾

\Z

輸入的結(jié)尾,僅用于最后的 結(jié)束符 (如果有的話)

\z

輸入的結(jié)尾

Greedy 數(shù)量詞

X ?

X ,一次或一次也沒有

X *

X ,零次或多次

X +

X ,一次或多次

X { n }

X ,恰好 n

X { n ,}

X ,至少 n

X { n , m }

X ,至少 n 次,但是不超過 m

Reluctant 數(shù)量詞

X ??

X ,一次或一次也沒有

X *?

X ,零次或多次

X +?

X ,一次或多次

X { n }?

X ,恰好 n

X { n ,}?

X ,至少 n

X { n , m }?

X ,至少 n 次,但是不超過 m

Possessive 數(shù)量詞

X ?+

X ,一次或一次也沒有

X *+

X ,零次或多次

X ++

X ,一次或多次

X { n }+

X ,恰好 n

X { n ,}+

X ,至少 n

X { n , m }+

X ,至少 n 次,但是不超過 m

Logical 運(yùn)算符

XY

X 后跟 Y

X | Y

X Y

( X )

X,作為 捕獲組

Back 引用

\ n

任何匹配的 n th 捕獲組

引用

\

Nothing,但是引用以下字符

\Q

Nothing,但是引用所有字符,直到 \E

\E

Nothing,但是結(jié)束從 \Q 開始的引用

特殊構(gòu)造(非捕獲)

(?: X )

X ,作為非捕獲組

(?idmsux-idmsux)

Nothing,但是將匹配標(biāo)志 i d m s u x on - off

(?idmsux-idmsux: X )

X ,作為帶有給定標(biāo)志 i d m s u x on - off的 非捕獲組

(?= X )

X ,通過零寬度的正 lookahead

(?! X )

X ,通過零寬度的負(fù) lookahead

(?<= X )

X ,通過零寬度的正 lookbehind

(?<! X )

X ,通過零寬度的負(fù) lookbehind

(?> X )

X ,作為獨(dú)立的非捕獲組

4、字符類

字符類可以出現(xiàn)在其他字符類中,并且可以包含并集運(yùn)算符(隱式)和交集運(yùn)算符 (&&)。并集運(yùn)算符表示至少包含其某個(gè)操作數(shù)類中所有字符的類。交集運(yùn)算符表示包含同時(shí)位于其兩個(gè)操作數(shù)類中所有字符的類。

字符類運(yùn)算符的優(yōu)先級(jí)如下所示,按從最高到最低的順序排列:

1

字面值轉(zhuǎn)義

\x

2

分組

[...]

3

范圍

a-z

4

并集

[a-e][i-u]

5

交集

[a-z&&[aeiou]]

java常用類庫-正則表達(dá)式【1】


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 长宁区| 黔西| 阿巴嘎旗| 屯门区| 昆山市| 建湖县| 桃江县| 米易县| 永寿县| 江山市| 同德县| 安塞县| 潮安县| 彰武县| 包头市| 两当县| 德兴市| 西乌| 青岛市| 沾益县| 秦安县| 广灵县| 夏邑县| 和田市| 武功县| 祁连县| 策勒县| 宁强县| 仪陇县| 吉林省| 霍邱县| 云安县| 浦东新区| 济南市| 沽源县| 宜兰县| 绥江县| 横峰县| 介休市| 东安县| 鲁山县|