---------------------- android培訓、java培訓、期待與您交流! ----------------------
正則表達式是指一個用來描述或者匹配一系列符合某個句法規則的字符串的單個字符串。
作用:用於專門操作字符串
特點:用一些特定的符號表示一些代碼操作。
好處:簡化對字符串的複雜操作
具體操作功能
1. 匹配
對應String類中的matches()方法,用於判斷字符串是否匹配某個正則表達式
2. 切割
對應String類中的splite()方法,使用某個正則表達式所表示的內容作爲分隔符對字符串進行切分,切分口的內容不包含分隔符。
特別需要注意的是,不能直接用”.”作爲分隔符,因爲”.”在正則中代表任意字符,如果非要使用”.”作爲切割符,在JAVA中要表示爲”\\.” 其中緊跟着”.”的反斜槓代表”.”不是正則表達式中的”.”,再前面的反斜槓是對第二個反斜槓的轉譯。同理,如果以”\”作爲分隔符,則要使用”\\”,例如要對字符串String s1= “c:\\abc\\a.txt”根據”\\”進行切割,那麼正則表達式就要寫成”\\\\”。
3. 替換
對應String類中的replaceAll()方法, 將字符串中符合某種正則的部分替換成另外的一個字符串。
如果要使用替換,就要先弄清楚組的概念
組:用()括起來的規則,稱爲捕獲組,組在形成的時候會自動生成編號,從1開始,在同一個正則表達式中,形成了捕獲組之後,後面的表達式中可以使用\N來重複使用前面定義的組規則。
比如,有字符串str = ”aedgkkkkksdfewiicgsoooliiesoz”,要求按照字符串中的重複字母作爲切割分來切分字符串的正則表達式就爲
“(.)\\1+”,分析,先將”.”定義爲一個捕獲組,然後後面使用\\1表示重用第一組規則,之後加號表示\\1出現了至少1次
如果題目要求改爲,去掉字符串中的重複字母,重複字母只保留一次,那麼就要使用replaceAll方法了
str.replaceAll(“(.)\\1+”, “$1” )
“$n”:獲取前一個規則中的組n
4. 獲取:將字符串中的符合規則的子串取出
操作步驟:
1. 將正則表達式封裝成對象。
2. 讓正則對象和要操作的字符串關聯
3. 關聯後,獲取正則匹配引擎
4. 通過引擎對符合規則的子串進行操作,比如取出。
public static void get(){
String str = "ming tian jiu yao fang jia le, da jia.";
//規則:將源字符串中的由三個字母的組成的單詞組成
String reg = "\\b[a-zA-Z]{3}\\b";// "\\b"單詞邊界
//將規則封裝成對象
Pattern p = Pattern.compile(reg);
//讓正則對象和要操作的字符串相關聯。獲取匹配器對象
Matcher m = p.matcher(str);
//將規則作用到字符串上,並執行匹配操作
while(m.find()){//此方法返回一個boolean值,表示是否找到,另見 find(int i)方法,此方法規定匹配器從索引位置i開始向後進行匹配
//獲取匹配後的結果
System.out.println(m.group());
//獲得與正則匹配的子串在原字符串的起始索引位置和結束索引位置
System.out.println(m.start()+"..."+m.end());
}
}
附:正則表達式中常用字符:
[abc] |
a、b 或 c(簡單類) |
[^abc] |
任何字符,除了 a、b 或 c(否定) |
[a-zA-Z] |
a 到 z 或 A 到 Z,兩頭的字母包括在內(範圍) |
[a-d[m-p]] |
a 到 d 或 m 到 p |
[a-z&&[def]] |
d、e 或 f(交集) |
[a-z&&[^bc]] |
a 到 z,除了 b 和 c |
[a-z&&[^m-p]] |
a 到 z,而非 m 到 p |
預定義字符類 |
|
. |
任何字符(與行結束符可能匹配也可能不匹配) |
\d |
數字:[0-9] |
\D |
非數字: [^0-9] |
\s |
空白字符:[ \t\n\x0B\f\r] |
\S |
非空白字符:[^\s] |
\w |
單詞字符:[a-zA-Z_0-9] |
\W |
非單詞字符:[^\w] |
Greedy 數量詞 |
|
X? |
X,一次或一次也沒有 |
X* |
X,零次或多次 |
X+ |
X,一次或多次 |
X{n} |
X,恰好 n 次 |
X{n,} |
X,至少 n 次 |
X{n,m} |
X,至少 n 次,但是不超過 m 次 |
邊界匹配器 |
|
^ |
行的開頭 |
$ |
行的結尾 |
\b |
單詞邊界 |
\B |
非單詞邊界 |
\A |
輸入的開頭 |
\G |
上一個匹配的結尾 |
\Z |
輸入的結尾,僅用於最後的結束符(如果有的話) |
\z |
輸入的結尾 |
---------------------- android培訓、java培訓、期待與您交流!
----------------------
詳細請查看:http://edu.csdn.net/heima