java_正則表達式

學習了正則表達式,個人感覺正則表達式還是非常重要的!

正則表達式的主要作用還是對字符串的操作:

1.首先來說對字符串的匹配問題:

我們可以構造一個真正表達式如:"[0-9]"這個很顯然說是字符爲數字!所以來試一下:

//字符串的匹配String類 的matches方法
	public static void method_1(){
		
		String regex = "[0-9]";
		String str = "a";
		String str1 = "0";
		boolean flag;
		flag = str.matches(regex);//字符串是否匹配該規則!
		System.out.println("結果爲"+flag);
		flag = str1.matches(regex);
		System.out.println("結果爲"+flag);
	}

在這個方法中,我們先構造了一個正則表達式,而且還有一個字符串,所以我們可以利用matches方法來驗證知否符合規範!那麼到底該如何書寫正則表達式呢?

來看一下api中給出的:
1.首先來看一下字符的表示

x 字符 x
\\ 反斜線字符
\0n 帶有八進制值 0 的字符 n (0 <= n <= 7)
\0nn 帶有八進制值 0 的字符 nn (0 <= n <= 7)
\0mnn 帶有八進制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7)
\xhh 帶有十六進制值 0x 的字符 hh
\uhhhh 帶有十六進制值 0x 的字符 hhhh
\t 製表符 ('\u0009')
\n 新行(換行)符 ('\u000A')
\r 回車符 ('\u000D')
\f 換頁符 ('\u000C')
\a 報警 (bell) 符 ('\u0007')
\e 轉義符 ('\u001B')
\cx 對應於 x 的控制符
2.再來看一下字符類:

[abc] abc(簡單類)
[^abc] 任何字符,除了 abc(否定)
[a-zA-Z] azAZ,兩頭的字母包括在內(範圍)
[a-d[m-p]] admp[a-dm-p](並集)
[a-z&&[def]] def(交集)
[a-z&&[^bc]] az,除了 bc[ad-z](減去)
[a-z&&[^m-p]] az,而非 mp[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]
在這裏我們可以用這些來表示!經常用的就是這些比如:.還有\d.有一點要注意,在java中必須用\\d來表示,原因?你懂得!

還要注意如果字符串是很長怎麼辦?所以有必要學習數量詞

X? X,一次或一次也沒有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n
X{n,} X,至少 n
X{n,m} X,至少 n 次,但是不超過 m
2.就是對字符串的切割了用到的是String的split方法!

	//字符串的切割用到了split方法!
	public static void method_2()
	{
		String regex = "(.)\\1";//疊詞的切割方法,用到了組的概念!
		String str = "stccusshiic";
		String[] strings;
		strings = str.split(regex);//字符串是否匹配該規則!
		for(String s : strings)
		{
			System.out.println(s);
		}
	}

以上給出了一個字符串切割的方法!涉及到了組的概念,在正則中要用到之前的匹配的東西,可以用組來實現!用()來實現,以後的覆用通過\1或者\n(表組號)來實現!

所以我們來看一下((())())一共有4個組分別是依照他們的左括號類區分的!

下面我們再來一個例子,看一下切割空格是如何進行的!

public static void method_3()
	{
		String regex = " +";//匹配多個空格
		String str = "st    uss iic";
		String[] strings;
		strings = str.split(regex);//字符串是否匹配該規則!
		for(String s : strings)
		{
			System.out.println(s);
		}
	}
3.字符串的替代:String的replaceAll

我們先寫代碼:

public static void method_4()
	{
		String regex = "(.)\\1";//匹配的疊詞並去掉
		String str = "stqqfdeetedggeriic";
		String s;
		s = str.replaceAll(regex, "$1");//字符串匹配該規則的替換掉
		System.out.println(s);

	}

看到的是用到了$1這個的意思就是當你的組使用後,可以在其他正則中使用$n來表示是第幾組的匹配!

其實在API中典型的調用是這樣的:

Pattern p = Pattern.compile("a*b");
 Matcher m = p.matcher("aaaaab");
 boolean b = m.matches();
而他可以簡單地寫成

 boolean b = Pattern.matches("a*b", "aaaaab");
我們可以看出,String中的對正則的應用是調用了Pattern和Matcher來實現的!





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章