java正則表達(dá)式對(duì)特殊字符的轉(zhuǎn)義以及異?,F(xiàn)象
正則表達(dá)式語(yǔ)法
在其他語(yǔ)言中,\\
表示:我想要在正則表達(dá)式中插入一個(gè)普通的(字面上的)反斜杠,請(qǐng)不要給它任何特殊的意義。
在 Java 中,\\
表示:我要插入一個(gè)正則表達(dá)式的反斜線,所以其后的字符具有特殊的意義。
所以,在其他的語(yǔ)言中(如Perl),一個(gè)反斜杠 \
就足以具有轉(zhuǎn)義的作用,而在 Java 中正則表達(dá)式中則需要有兩個(gè)反斜杠才能被解析為其他語(yǔ)言中的轉(zhuǎn)義作用。也可以簡(jiǎn)單的理解在 Java 的正則表達(dá)式中,兩個(gè) \\
代表其他語(yǔ)言中的一個(gè) \
,這也就是為什么表示一位數(shù)字的正則表達(dá)式是 \\d
,而表示一個(gè)普通的反斜杠是\\\\
。
java正則表達(dá)式對(duì)特殊字符的轉(zhuǎn)義
正則表達(dá)式會(huì)對(duì)一些特殊字符進(jìn)行轉(zhuǎn)義,主要有以下字符:
'$', '(', ')', '*', '+', '.', '[', ']', '?', '\\', '^', '{', '}', '|'
比如,正則表達(dá)式對(duì)特殊字符’ | ’ 的轉(zhuǎn)義:
public static void main(String[] args) { String str = "a|b|c"; // 錯(cuò)誤示范 // str.split("|"); // // 正確的寫(xiě)法,應(yīng)該在需要轉(zhuǎn)義的字符前加上 "\\" String[] split = str.split("\\|"); for (String s : split) { System.out.print(s + " "); // 控制臺(tái)打印 a b c } }
異?,F(xiàn)象
正則需要轉(zhuǎn)義字符:
'$', '(', ')', '*', '+', '.', '[', ']', '?', '\\', '^', '{', '}', '|'
異?,F(xiàn)象: java.util.regex.PatternSyntaxException: Dangling meta. character '*' near index 0
解決方法: 對(duì)特殊字符加\轉(zhuǎn)義即可。
注意:雖然使用[]在部分條件下也可以,但是在對(duì)于(、[、{范圍邊界開(kāi)始符不匹配的情況下會(huì)報(bào)如下:
異?,F(xiàn)象:java.util.regex.PatternSyntaxException: Illegal repetition near index 50
Java過(guò)濾正則表達(dá)式特殊字代碼如下(注意:\需要第一個(gè)替換,否則replace方法替換時(shí)會(huì)有邏輯bug)
/** * 轉(zhuǎn)義正則特殊字符 ($()*+.[]?\^{},|) * * @param keyword * @return */ public static String escapeExprSpecialWord(String keyword) { if (StringUtils.isNotBlank(keyword)) { String[] fbsArr = { "\\", "$", "(", ")", "*", "+", ".", "[", "]", "?", "^", "{", "}", "|" }; for (String key : fbsArr) { if (keyword.contains(key)) { keyword = keyword.replace(key, "\\" + key); } } } return keyword; }
實(shí)戰(zhàn)
后臺(tái)傳回的網(wǎng)址:http://192.168.1.17:8096/detection-admin\video\2020\11\4\浙B99939\3604252011040004\浙B99939_1_PDASP_01.mp4
通過(guò)工具類(lèi)轉(zhuǎn)換:
/** * @author Longchengbin * @description 將網(wǎng)址反斜杠轉(zhuǎn)成正斜杠并將中文轉(zhuǎn)為16進(jìn)制字符 * @since 2020-11-4 16:33 **/ public static String decode(String url) { String[] strings = url.split("\\\\"); String s1 = strings[strings.length - 1]; String s2 = strings[strings.length - 3]; String s = ""; try { //將反斜杠替換成正斜杠 s = url.replaceAll("\\\\", "/"). //將中文轉(zhuǎn)成16進(jìn)制字符 replace(s1, URLEncoder.encode(s1, "utf-8")).replace(s2, URLEncoder.encode(s2, "utf-8")); LogUtils.w(s); } catch (UnsupportedEncodingException e) { LogUtils.e("網(wǎng)址轉(zhuǎn)換報(bào)錯(cuò):" + e.toString()); } return s; }
轉(zhuǎn)換后:
http://192.168.1.17:8096/detection-admin/video/2020/11/4/%E6%B5%99B99939/3604252011040004/%E6%B5%99B99939_1_PDASP_01.mp4
總結(jié)
到此這篇關(guān)于java正則表達(dá)式對(duì)特殊字符的轉(zhuǎn)義以及異?,F(xiàn)象的文章就介紹到這了,更多相關(guān)java正則對(duì)特殊字符轉(zhuǎn)義內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
導(dǎo)出maven項(xiàng)目依賴(lài)的jar包(圖文教程)
下面小編就為大家?guī)?lái)一篇導(dǎo)出maven項(xiàng)目依賴(lài)的jar包(圖文教程)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10java實(shí)現(xiàn)百度云OCR文字識(shí)別 高精度OCR識(shí)別身份證信息
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)百度云OCR文字識(shí)別,高精度OCR識(shí)別身份證信息,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11SpringBoot Mybatis動(dòng)態(tài)數(shù)據(jù)源切換方案實(shí)現(xiàn)過(guò)程
這篇文章主要介紹了SpringBoot+Mybatis實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源切換方案過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04簡(jiǎn)單介紹Java?方法的重載、可變參數(shù)、作用域
這篇文章主要簡(jiǎn)單介紹Java?方法的重載、可變參數(shù)、作用域的相關(guān)資料,需要的朋友可以參考下2023-07-07MyBatis-Ext快速入門(mén)實(shí)戰(zhàn)
MyBatis-Ext是MyBatis的增強(qiáng)擴(kuò)展,和我們平常用的Mybatis-plus非常類(lèi)似,本文主要介紹了MyBatis-Ext快速入門(mén)實(shí)戰(zhàn),感興趣的可以了解一下2021-10-10Jmeter參數(shù)化實(shí)現(xiàn)方法及應(yīng)用實(shí)例
這篇文章主要介紹了Jmeter參數(shù)化實(shí)現(xiàn)方法及應(yīng)用實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08Spring Framework 5.0 入門(mén)教程
Spring Framework提供了一個(gè)簡(jiǎn)易的開(kāi)發(fā)方式,這種開(kāi)發(fā)方式,將避免那些可能致使底層代碼變得繁雜混亂的大量的屬性文件和幫助類(lèi)。這篇文章主要介紹了Spring Framework 5.0 入門(mén)教程,感興趣的小伙伴們可以參考一下2018-05-05Spring注解驅(qū)動(dòng)之ApplicationListener異步處理事件說(shuō)明
這篇文章主要介紹了Spring注解驅(qū)動(dòng)之ApplicationListener異步處理事件說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09