关于一个java正则表达式替换的问题

问题描述

一个很简单的json串:String json = "{"name1":"value1","na"me2":"va"lue2"}";问题是:现在key和value的值中都有可能出现双引号,需要将key或value中值的双引号(不管中间有多少个双引号都替换,边界的不能替换)替换味单引号;现在 json= json.replaceAll(""(\w*)"(\s*:\s*)", "'$1'$2"); json= json.replaceAll("(\s*:\s*)"(\w*)"", "$1'$2'");都达不到要求....替换成功打印到控制台后希望是:{"name1":"value1","na'me2":"va'lue2"}

解决方案

json = json.replaceAll(""", "'").replaceAll("([\{\:\,])'", "$1"").replaceAll("'([\}\:\,])", ""$1");
解决方案二:
上面还是写错了!好像忘记匹配多个“了这个就对了public static void main(String[] args) {String json = "{"name1":"value1","na"me2":"va"l"u"e2"}"; System.out.println(json);Pattern p = Pattern.compile("(?<=(\{|,|:)").*?(?="(:|,|\}))");Matcher m = p.matcher(json);while(m.find()){String tmp = m.group();json = json.replaceAll(tmp, tmp.replaceAll(""","'"));}System.out.println(json);}
解决方案三:
上面写错了点json = json.replaceAll("(?<=(\{|,|:)"\w{1,100})"(?=\w+"(:|,|\}))","'");
解决方案四:
一个效率不太高的方法:String json = "{"name1":"value1","na"me2":"va"lue2"}";Pattern p = Pattern.compile("\w+(")\w+"); Matcher m = p.matcher(json); // 获得匹配器对象 while (m.find()) { json=json.replace(m.group(),m.group().replaceAll(""","")); } System.out.println(json);
解决方案五:
写了半天,老报错,负向断言的时候里面不能用.*?贪婪匹配 (希望有人能告诉我为什么) 用的.(1,Integer.MAX_VALUE-1)?进行贪婪匹配Pattern p = Pattern.compile("(?<=(\{|,|:)"(.{1,"+(Integer.MAX_VALUE-1)+"}?))"(?=.+?"(:|,|\}))");
解决方案六:
如果每个key或者value中只有连续出现的 " 一次或多次,就更简单json = json.replaceAll("(\w+)"+(\w+)", "$1'$2");
解决方案七:
不一定要用正则表达式嘛,反正我写不出来,我倒是有个思路可以解决!1.替换字符中的所有空格字符串为非空格解决"name":"value1","na"me2":"value2","name3" : " value3 "解决空格问题;2.用正则表达式将字符分组String reg="(":"\b|","\b)";String[] arr=s.split(reg);3.循环查找替换arr[i]中"字符不在开头或者结尾的字符!

时间: 2024-11-02 04:19:12

关于一个java正则表达式替换的问题的相关文章

js java正则表达式替换手机号4-7位为星*号

需求: 一个手机号13152461111,由于安全性,需要替换4-7位字符串为星号,为131****1111,那么有2中玩法,一种是前端隐藏,一种是后台隐藏. 1. 前台隐藏 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Mvc1</title> <script type="text/j

关于java正则表达式 替换的问题,希望各位大牛,帮忙下!

问题描述 //能得到要的结果:cc1aa2String s = "cc[b]1[/b]aa[b]2[/b]";s=s.replaceAll("\[b\]([^(\[/b\])]+)\[/b\]", "$1") ;System.out.println(s);//如果 String s = "cc[b]b[/b]aa[b]b2[/b]" ; 匹配不了[b][/b]里面的内容?麻烦 哪位大牛 帮忙解决下 问题补充:<div c

求一个Java正则表达式

问题描述 public class Test { public static final String REGEXP_PATTERN = "^[0-9\*TSPx\.\|\(\)\[\]\{\}~,\\]+$";public static void main(String[] args) {String name = "[[[[[[[[[[";if (!name.matches(REGEXP_PATTERN)) { System.out.println("

使用正则表达式替换报表名称中的特殊字符(推荐)_正则表达式

正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表通常被用来检索.替换那些符合某个模式(规则)的文本. 许多程序设计语言都支持利用正则表达式进行字符串操作.例如,在Perl中就内建了一个功能强大的正则表达式引擎,还有java语言自带的.正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的.正则表达式通常缩写成"regex",单数有regexp.regex,复数

使用正则表达式替换报表名称中的特殊字符(推荐)

正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表通常被用来检索.替换那些符合某个模式(规则)的文本. 许多程序设计语言都支持利用正则表达式进行字符串操作.例如,在Perl中就内建了一个功能强大的正则表达式引擎,还有java语言自带的.正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的.正则表达式通常缩写成"regex",单数有regexp.regex,复数

java 正则表达式问题

问题描述 要将一下字符串中的红色字体部分用java正则表达式替换为空,正则表达式应该怎么样写? body/div[3][@class='content']/div[2][@class='content-outer']/div[2][@class='fauxborder-left content-fauxborder-left']/div[2][@class='content-inner']/div[2][@class='main-outer']/div[2][@class='fauxborder

java正则表达式

问题描述 求一个java正则表达式 匹配以下格式1. /xmad-f000/000000/material/1/20110923164401105.jpg (规则:以/xmad-f开头后接三位数字 斜杠 六位数字 斜杠 material 斜杠 1 斜杠 任意字符.jpg或者.gif.png)2.images/logo.gif 或者 logo.gif . ../../images/logo.gif等(字符串规则:即相对图片路径 不以 c:/ d:/ e:/ f:/ 或者 http开头,以图片格式后

请问怎样用java实现一个基于正则表达式的查找程序呢?

问题描述 各位高手,请问怎样用java实现一个基于正则表达式的查找程序呢? 解决方案 解决方案二:可以去看看horstmann写得corejavaVolumI第12章最后一节RegularExpressions:importjava.io.*;importjava.net.*;importjava.util.regex.*;/**ThisprogramdisplaysallURLsinawebpagebymatchingaregularexpressionthatdescribesthe<ahr

java正则表达式的一个问题

问题描述 java正则表达式的一个问题 我现在需要写一个正则匹配 BA BC CA CB 中的一个,不分大小写,两字母中间可以有斜杠,这个组合可以出现两次,用逗号隔开 我写了这样一个正则,但是太长了,有简便一些的写法吗? [B|b]/?[A|a]|[C|c]/?[A|a]|[B|b]/?[C|c]|[C|c]/?[B|b]((,|,)[\s\p{Zs}]*[B|b]/?[A|a]|[C|c]/?[A|a]|[B|b]/?[C|c]|[C|c]/?[B|b])? 解决方案 正则中可以忽略大小写匹配