Java正則多字符串匹配替換
Java中使用也比較簡(jiǎn)單:
1. 編譯正則表達(dá)式的字面值得到對(duì)應(yīng)的模式Pattern對(duì)象;
2. 創(chuàng)建匹配給定輸入與此模式的匹配器Matcher;
3. 通過(guò)匹配器對(duì)象執(zhí)行操作,匹配器對(duì)象的方法很豐富,方法之間組合使用更加強(qiáng)大。
public static void main(String[] args) {
//被替換關(guān)鍵字的的數(shù)據(jù)源
Map<String,String> tokens = new HashMap<String,String>();
tokens.put("cat", "Garfield");
tokens.put("beverage", "coffee");
//匹配類(lèi)似velocity規(guī)則的字符串
String template = "${cat} really needs some ${beverage}.";
//生成匹配模式的正則表達(dá)式
String patternString = "\\$\\{(" + StringUtils.join(tokens.keySet(), "|") + ")\\}";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(template);
//兩個(gè)方法:appendReplacement, appendTail
StringBuffer sb = new StringBuffer();
while(matcher.find()) {
matcher.appendReplacement(sb, tokens.get(matcher.group(1)));
}
matcher.appendTail(sb);
//out: Garfield really needs some coffee.
System.out.println(sb.toString());
//對(duì)于特殊含義字符"\","$",使用Matcher.quoteReplacement消除特殊意義
matcher.reset();
//out: cat really needs some beverage.
System.out.println(matcher.replaceAll("$1"));
//out: $1 really needs some $1.
System.out.println(matcher.replaceAll(Matcher.quoteReplacement("$1")));
//到得郵箱的前綴名。插一句,其實(shí)驗(yàn)證郵箱的正則多種多樣,根據(jù)自己的需求寫(xiě)對(duì)應(yīng)的正則才是王道
String emailPattern = "^([a-z0-9_\\.\\-\\+]+)@([\\da-z\\.\\-]+)\\.([a-z\\.]{2,6})$";
pattern = Pattern.compile(emailPattern);
matcher = pattern.matcher("test@qq.com");
//驗(yàn)證是否郵箱
System.out.println(matcher.find());
//得到@符號(hào)前的郵箱名 out: test
System.out.println(matcher.replaceAll("$1"));
//獲得匹配值
String temp = "<meta-data android:name=\"appid\" android:value=\"joy\"></meta-data>";
pattern = Pattern.compile("android:(name|value)=\"(.+?)\"");
matcher = pattern.matcher(temp);
while(matcher.find()) {
//out: appid, joy
System.out.println(matcher.group(2));
}
}
一些老是忘基礎(chǔ)
[...] 位于括號(hào)之內(nèi)的任意字符
[^...] 不在括號(hào)之中的任意字符
. 除了換行符之外的任意字符,等價(jià)于[^\n]
\w 任何單字字符, 等價(jià)于[a-zA-Z0-9]
\W 任何非單字字符,等價(jià)于[^a-zA-Z0-9]
\s 任何空白符,等價(jià)于[\ t \ n \ r \ f \ v]
\S 任何非空白符,等價(jià)于[^\ t \ n \ r \ f \ v]
\d 任何數(shù)字,等價(jià)于[0-9]
\D 除了數(shù)字之外的任何字符,等價(jià)于[^0-9]
[\b] 一個(gè)退格直接量(特例)
{n, m} 匹配前一項(xiàng)至少n次,但是不能超過(guò)m次
{n, } 匹配前一項(xiàng)n次,或者多次
{n} 匹配前一項(xiàng)恰好n次
? 匹配前一項(xiàng)0次或1次,也就是說(shuō)前一項(xiàng)是可選的. 等價(jià)于 {0, 1}
+ 匹配前一項(xiàng)1次或多次,等價(jià)于{1,}
* 匹配前一項(xiàng)0次或多次.等價(jià)于{0,}
| 選擇.匹配的要么是該符號(hào)左邊的子表達(dá)式,要么它右邊的子表達(dá)式
(...) 分組.將幾個(gè)項(xiàng)目分為一個(gè)單元.這個(gè)單元可由 *、+、?和|等符號(hào)使用,而且還可以記住和這個(gè)組匹配的字符以供此后引用使用
\n 和第n個(gè)分組所匹配的字符相匹配.分組是括號(hào)中的子表達(dá)式(可能是嵌套的).分組號(hào)是從左到右計(jì)數(shù)的左括號(hào)數(shù)
^ 匹配的是字符的開(kāi)頭,在多行檢索中,匹配的是一行的開(kāi)頭
$ 匹配的是字符的結(jié)尾,在多行檢索中,匹配的是一行的結(jié)尾
\b 匹配的是一個(gè)詞語(yǔ)的邊界.簡(jiǎn)而言之就是位于字符\w 和 \w之間的位置(注意:[\b]匹配的是退格符)
\B 匹配的是非詞語(yǔ)的邊界的字符
題外話
郵箱驗(yàn)證,以前驗(yàn)證郵箱,網(wǎng)上搜個(gè)正則裝在自己程序里面就用,其實(shí)這是不對(duì)的,不同的公司對(duì)郵箱的驗(yàn)證格式是不一樣的,比方說(shuō)163和qq郵箱注冊(cè),他們要求的格式都不一樣,所以搜一個(gè)正則表達(dá)式就去套所有的郵箱格式也是不對(duì)的,符合自己的需求的正則才是正確的。
相關(guān)文章
修改xml文件再也不用重啟項(xiàng)目mybatis-xmlreload方法
這篇文章主要為大家介紹了修改xml文件再也不用重啟項(xiàng)目mybatis-xmlreload,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
Spring?cloud網(wǎng)關(guān)gateway進(jìn)行websocket路由轉(zhuǎn)發(fā)規(guī)則配置過(guò)程
這篇文章主要介紹了Spring?cloud網(wǎng)關(guān)gateway進(jìn)行websocket路由轉(zhuǎn)發(fā)規(guī)則配置過(guò)程,文中還通過(guò)實(shí)例代碼介紹了Spring?Cloud?Gateway--配置路由的方法,需要的朋友可以參考下2023-04-04
淺談java Iterator.remove()方法的用法(詳解)
下面小編就為大家?guī)?lái)一篇淺談java Iterator.remove()方法的用法(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
Spring boot通過(guò)AOP防止API重復(fù)請(qǐng)求代碼實(shí)例
這篇文章主要介紹了Spring boot通過(guò)AOP防止API重復(fù)請(qǐng)求代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
使用Java注解和反射實(shí)現(xiàn)JSON字段自動(dòng)重命名
這篇文章主要介紹了如何使用Java注解和反射實(shí)現(xiàn)JSON字段自動(dòng)重命名,文中通過(guò)代碼示例和圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-08-08
java springboot的概述、特點(diǎn)與構(gòu)建介紹
大家好,本篇文章主要講的是springboot的概述、特點(diǎn)與構(gòu)建介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12
java進(jìn)行遠(yuǎn)程部署與調(diào)試及原理詳解
這篇文章主要介紹了java進(jìn)行遠(yuǎn)程部署與調(diào)試及原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
微信企業(yè)號(hào) 根據(jù)錯(cuò)誤碼返回錯(cuò)誤信息類(lèi)封裝
這篇文章主要介紹了微信企業(yè)號(hào) 根據(jù)錯(cuò)誤碼返回錯(cuò)誤信息類(lèi)封裝的相關(guān)資料,需要的朋友可以參考下2016-10-10

