用到Json與replaceAll
Http攔截腳本中經常需要替換,replace雖然不需要處理特殊字符,但是不能匹配多個,ReplaceAll能夠使用正則,不過需要處理的轉移實在太多
比如,需要替換一次\,需要輸入四次\,而其他腳本進行注冊表寫入時,又需要轉移那么需要輸入8次\,對於這種情況,又不能簡單的把所有斜杠翻倍。
簡單點處理方式,
replace("\\4","\\\\");
采用自定義關鍵字,替換4次斜杠
下面是replaceAll處理特殊字符所需要斜杠個數
package json;
public class ReplaceAllTest {
public static void main(String[] args) {
//正則表達式中特殊字符需要//轉義 ^詞首 $詞尾 *多個字符串>0 +多個字符串>1 ()左右括號
puts("a~!@#$%^&*()_+b".replaceAll("~!@#\\$%\\^&\\*\\(\\)_\\+", "11~!@#\\$%^&*()_+11")); //$在后面的字符串中需要轉義
puts("a`-=b".replaceAll("`-=", "22`-=22"));
puts("----keyboard2----");
puts("a[b","a[b".replaceAll("\\[", "33[44")); //左方括號需要轉義
puts("a{b","a{b".replaceAll("\\{", "33{44")); //左大括號需要轉義
puts("a]}b","a]}b".replaceAll("]}", "33]}44"));
puts("a\\b","a\\b".replaceAll("\\\\", "11\\\\22")); //斜杠,需要兩次轉義才是輸出結果
puts("a3|4b","a3|4b".replaceAll("3\\|4", "11|22")); //豎桿,正則表示或,需要轉義
puts("----keyboard3----");
puts("a;:'\"b","a;:'\"b".replaceAll(";:'\"", "11;:'\"22")); //引號,只需要一個轉義/,兩個報錯,三個與一個同樣效果
puts("a;:'\"b","a;:'\"b".replaceAll(";:'\\\"", "11;:'\\\"22"));
puts("a\\\"b","a\\\"b".replaceAll("\\\\\"", "111"));
puts("a\\\"b","a\\\"b".replaceAll("\\\\\\\"", "111"));
puts("----keyboard4----");
puts("a,.<>b/","a,.<>b/".replaceAll(",\\.<>/", "11,.<>/22"));
puts("a?b","a?b".replaceAll("\\?", "11?22")); //問號,正則中表示0~1個前面字符串
puts("特殊字符中,正則表達式用到的字符都需要\\進行轉義");
puts("需要關注\"、\\前面的斜杠可以看作本身的一部分 ");
puts("需要關注$, 替換后的$同樣需要進行轉義");
puts("-----正則---轉義字符--------");
puts("a33b".replaceAll("\\d+", "11\\\\d+22")); //正常轉義字符使用--替換數字
puts("a-3a3-b".replaceAll("-(\\w+)-", "11\\\\w+22")); //正常轉義字符使用--替換字母或數字
puts("a\\db".replaceAll("\\\\d", "11\\\\d22")); //替換字符串中的\d 為11\d22---與替換\一樣
puts("a\\wb".replaceAll("\\\\w", "11\\\\w22")); //替換字符串中的\w 為11\w22---與替換\一樣
puts("a\\$b".replaceAll("\\\\\\$", "11\\\\\\$22")); //替換字符串中的\$ 為11\$22---與替換\+$一樣\\\\+\\$
puts("-------------綜上 單個字符斜杠使用-----"
+ "\r\n只需要一次斜杠的有\" "
+ "\r\n需要兩次斜杠的有:表示自身$ ^ ( ) { [ | ? * . + "
+ "\r\n需要兩次斜杠的有:表示正則d D w W s S t r n b..."
+ "\r\n需要三次斜杠的有:表示自身\" 與一次效果相同 "
+ "\r\n需要四次斜杠的有:表示自身\\ "
+ "\r\n---------兩個字符斜杠使用---------------"
+ "\r\n例如替換\\d,需要四次斜杠"
+ "\r\n例如替換\\\",需要五次斜杠"
+ "\r\n例如替換\\{ \\$ \\*,需要六次斜杠"
+ "\r\n例如替換\\\",使用七次斜杠與五次一樣"
);
// puts("----中文字符-當作普通字符使用-----");
// puts("c~!@#¥%……&*()——+-=n".replaceAll("~!@#¥%……&*()——+-=","11~!@#¥%……&*()——+-=00"));
// puts("a[]{}、|b".replaceAll("[]{}、|", "11[]{}、|00"));
// puts("a;:‘’“”b".replaceAll(";:‘’“”", "11;:‘’“”00"));
// puts("a,。《》/?b".replaceAll(",。《》/?", "11,。《》/?00"));
}
public static void puts(String s){
System.out.println(s);
}
public static void puts(String s,String s2){
System.out.println(s+"\t"+s2);
}
}
輸出結果為
a11~!@#$%^&*()_+11b
a22`-=22b
----keyboard2----
a[b a33[44b
a{b a33{44b
a]}b a33]}44b
a\b a11\22b
a3|4b a11|22b
----keyboard3----
a;:'"b a11;:'"22b
a;:'"b a11;:'"22b
a\"b a111b
a\"b a111b
----keyboard4----
a,.<>b/ a,.<>b/
a?b a11?22b
特殊字符中,正則表達式用到的字符都需要\進行轉義
需要關注"、\前面的斜杠可以看作本身的一部分
需要關注$, 替換后的$同樣需要進行轉義
-----正則---轉義字符--------
a11\d+22b
a11\w+22b
a11\d22b
a11\w22b
a11\$22b
-------------綜上 單個字符斜杠使用-----
只需要一次斜杠的有"
需要兩次斜杠的有:表示自身$ ^ ( ) { [ | ? * . +
需要兩次斜杠的有:表示正則d D w W s S t r n b...
需要三次斜杠的有:表示自身" 與一次效果相同
需要四次斜杠的有:表示自身\
---------兩個字符斜杠使用---------------
例如替換\d,需要四次斜杠
例如替換\",需要五次斜杠
例如替換\{ \$ \*,需要六次斜杠
例如替換\",使用七次斜杠與五次一樣