025.1 正則表達式 常用功能
內容:正則表達式是什麽?為什麽會有正則表達式?正則表達式常用功能
#####################正則表達式是什麽?
正則表達式是用於匹配想要的規則的字符串,如:
var str = "abc123def"; var patt1 = /[0-9]+/; document.write(str.match(patt1));
patt1 就是一個 正則表達式,這裏是匹配數字,要匹配其他,當然要學規則
#####################為什麽會有正則表達式?
有匹配字符串的需求,比如上面例子,如果數字更長,我們又要取出,用代碼編寫就會比較復雜,如果使用正則,每次都是使用這個方法,熟悉後,編寫迅速,太多就不寫了,啰嗦
###############################################################################常用功能
###############規則
java 中要重復出現
###################Java正則常用功能
//####切割
private static void splitDemo() { String temp = "awelafew##aewwoeif$$$$fewaigaxxxxoaigjwkqqqqqq"; String regex = "(.)\\1+"; //重復數量大於1String[] names = temp.split(regex); for(String name:names){ System.out.println(name); } }
與正則匹配的字符為:
##
ww
$$$$
xxxx
qqqqqq
調用結果:輸出
awelafew
ae
oeif
fewaiga
oaigjwk
這裏通過下面這個例子理解重復問題。
([0-9])\1{5} 或 ([\d])\1{5} 連續相同的6位數字 如:333333
([0-9a-zA-Z])\1{5} 連續相同的6位數字或字母 如:222222 cccccc ZZZZZZ
([\d])\1{2}([a-z])\2{2} 連續相同3位數字後根連續相同的三位小寫字母 如:222www
([\d])\1{2}([a-z])\2{2}|([a-z])\3{2}([\d])\4{2} 同上,但是能匹配數字+字母或字母+數字 如:222www 或 www222
這麽多的例子自己可以擴展,要註意的就是 \1 \2代表位置,從左到右遞增
所以上面的正則是可以改成(.)\\1{1,}
//####替換
{ String num = "15722226666"; num = num.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"); //在方法多參數時,後面的參數可以通過 $編號 的形式取到前一個參數的組 System.out.println(num); }
調用結果:輸出
157****6666
//####獲取
實現獲取:將符合規則的內容提取出來
用正則表達式對象。java.util.regex.Pattern
1.將字符串規則封裝成Pattern對象。Pattern.compile(regex)
2.通過正則對象獲取匹配器對象。用對將正則規則作用到要操作的字符串上
3.通過匹配器對象的方法,對字符串進行操作
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
Matcher類
? matches 方法嘗試將整個輸入序列與該模式匹配。
? lookingAt 嘗試將輸入序列從頭開始與該模式匹配。
? find 方法掃描輸入序列以查找與該模式匹配的下一個子序列。
String
group() 返回由以前匹配操作所匹配的輸入子序列。
單詞邊界:\\b
步驟:
1、獲取Pattern類
2、Pattern類和Matcher關聯
3、匹配
4、獲取
private static void getDemo() { String source = "aix awefawe wega aiq wea fwa gal aweflia"; String regex = "\\b[a-zA-Z]{3}"; // 開頭以字母開始,選取前面三個 Pattern p = Pattern.compile(regex); Matcher m = p.matcher(source); while(m.find()){ System.out.println(m.group()); } }
025.1 正則表達式 常用功能