學習了正則表達式,個人感覺正則表達式還是非常重要的!
正則表達式的主要作用還是對字符串的操作:
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 的控制符 |
[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] |
還要注意如果字符串是很長怎麼辦?所以有必要學習數量詞
X? | X,一次或一次也沒有 |
X* | X,零次或多次 |
X+ | X,一次或多次 |
X{n} | X,恰好 n 次 |
X{n,} | X,至少 n 次 |
X{n,m} | X,至少 n 次,但是不超過 m 次 |
//字符串的切割用到了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來實現的!