• ReplaceAll 特殊字符处理


    用到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 为11d22---与替换一样

    puts("a\wb".replaceAll("\\w", "11\\w22")); //替换字符串中的w 为11w22---与替换一样

    puts("a\$b".replaceAll("\\\$", "11\\\$22")); //替换字符串中的$ 为11$22---与替换+$一样\\+\$

    puts("-------------综上 单个字符斜杠使用-----"

      + " 只需要一次斜杠的有" "

      + " 需要两次斜杠的有:表示自身$ ^ ( ) { [ | ? * . + "

      + " 需要两次斜杠的有:表示正则d D w W s S t r n b..."

      + " 需要三次斜杠的有:表示自身" 与一次效果相同 "

      + " 需要四次斜杠的有:表示自身\ "

      + " ---------两个字符斜杠使用---------------"

      + " 例如替换\d,需要四次斜杠"

      + " 例如替换\",需要五次斜杠"

      + " 例如替换\{ \$ \*,需要六次斜杠"

      + " 例如替换\",使用七次斜杠与五次一样"

      );

    // 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+" "+s2);

    }

    }

    输出结果为

    a11~!@#$%^&*()_+11b

    a22`-=22b

    ----keyboard2----

    a[b a33[44b

    a{b a33{44b

    a]}b a33]}44b

    a a1122b

    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

    特殊字符中,正则表达式用到的字符都需要进行转义

    需要关注"、前面的斜杠可以看作本身的一部分 

    需要关注$, 替换后的$同样需要进行转义

    -----正则---转义字符--------

    a11d+22b

    a11w+22b

    a11d22b

    a11w22b

    a11$22b

    -------------综上 单个字符斜杠使用-----

    只需要一次斜杠的有" 

    需要两次斜杠的有:表示自身$ ^ ( ) { [ | ? * . + 

    需要两次斜杠的有:表示正则d D w W s S t r n b...

    需要三次斜杠的有:表示自身" 与一次效果相同 

    需要四次斜杠的有:表示自身 

    ---------两个字符斜杠使用---------------

    例如替换d,需要四次斜杠

    例如替换",需要五次斜杠

    例如替换{ $ *,需要六次斜杠

    例如替换",使用七次斜杠与五次一样

  • 相关阅读:
    桥接模式新解:客户端服务器模式
    laravel-admin 自定义导出表单
    PHP实现git部署的方法,可以学学!
    PHP的安全性问题,你能说得上几个?
    nginx的四个基本功能
    laravel orm
    laravel-admin列表排序在使用了$grid->model()->latest()后$grid其它加上sortable()可排序的列在排序时不起作用
    Laravel 5.4: 特殊字段太长报错 420000 字段太长
    关于在phpStudy环境下,windows cmd中 php不是内部命令问题
    phpstudy安装好之后mysql无法启动(亲测可行)
  • 原文地址:https://www.cnblogs.com/hua198/p/5907286.html
Copyright © 2020-2023  润新知